1. 程式人生 > >替換某行,插入某行,刪除某行,獲取行號

替換某行,插入某行,刪除某行,獲取行號

<?php
// fedora-centos-apache-php-cannot-write-delete-file
// getsebool -a|grep httpd
// httpd_unified --> off
// setsebool -P httpd_unified 1

replaceTarget("test.txt", "aaaaaaaaaaaaaaaaa", "AAAAA");
//unlink("test.txt");

#替換指定字串
function replaceTarget($filePath, $replaceCont, $target)
{
    $result = null;
    $fileCont = file_get_contents($filePath);
    $targetIndex = strpos($fileCont, $target); #查詢目標字串的座標

    if ($targetIndex !== false) {
        #找到target的前一個換行符
        $preChLineIndex = strrpos(substr($fileCont, 0, $targetIndex + 1), "\n");
        #找到target的後一個換行符
        $AfterChLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;
        if ($preChLineIndex !== false && $AfterChLineIndex !== false) {
            #刪掉指定行,插入新內容
            $result = substr($fileCont, 0, $preChLineIndex + 1) . $replaceCont . "\n" . substr($fileCont, $AfterChLineIndex + 1);
            file_put_contents($filePath, $result);
            //$fp = fopen($filePath, "w+");
            //fwrite($fp, $result);
            //fclose($fp);
        }
    }
}

#在需要查詢的內容後一行新起一行插入內容
function insertAfterTarget($filePath, $insertCont, $target)
{
    $result = null;
    $fileCont = file_get_contents($filePath);
    $targetIndex = strpos($fileCont, $target); #查詢目標字串的座標

    if ($targetIndex !== false) {
        #找到target的後一個換行符
        $chLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;
        if ($chLineIndex !== false) {
            #插入需要插入的內容
            $result = substr($fileCont, 0, $chLineIndex + 1) . $insertCont . "\n" . substr($fileCont, $chLineIndex + 1);
            file_put_contents($filePath, $result);
            //$fp = fopen($filePath, "w+");
            //fwrite($fp, $result);
            //fclose($fp);
        }
    }
}

#刪除內容所在的某一行
function delTargetLine($filePath, $target)
{
    $result = null;
    $fileCont = file_get_contents($filePath);
    $targetIndex = strpos($fileCont, $target); #查詢目標字串的座標

    if ($targetIndex !== false) {
        #找到target的前一個換行符
        $preChLineIndex = strrpos(substr($fileCont, 0, $targetIndex + 1), "\n");
        #找到target的後一個換行符
        $AfterChLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;
        if ($preChLineIndex !== false && $AfterChLineIndex !== false) {
            #重新寫入刪掉指定行後的內容
            $result = substr($fileCont, 0, $preChLineIndex + 1) . substr($fileCont, $AfterChLineIndex + 1);
            file_put_contents($filePath, $result);
            //$fp = fopen($filePath, "w+");
            //fwrite($fp, $result);
            //fclose($fp);
        }
    }
}

#獲取某段內容的行號
/**
 * @param $filePath
 * @param $target   待查詢欄位
 * @param bool $first   是否再匹配到第一個欄位後退出
 * @return array
 */
function getLineNum($filePath, $target, $first = false)
{
    $fp = fopen($filePath, "r");
    $lineNumArr = array();
    $lineNum = 0;
    while (!feof($fp)) {
        $lineNum++;
        $lineCont = fgets($fp);
        if (strstr($lineCont, $target)) {
            if($first) {
                return $lineNum;
            } else {
                $lineNumArr[] = $lineNum;
            }
        }
    }
    return $lineNumArr;
}

?>

referer: http://www.cnblogs.com/zemliu/archive/2012/06/16/2551541.html

相關推薦

【Java】sql實現插入插入值的主鍵自增防止遷移資料時報主鍵衝突的錯誤;

一、問題 我們要自己造一些測試資料,並且這些SQL指令碼要遷移到其他環境,遷移過程中,如果主鍵寫死,在其他環境,可能會出現主鍵衝突;所以,我們要寫活的主鍵,實現起來也很簡單; 二、解決方法 insert into userInfo(id,name,age)val

字符串函數(strcpy字符串拷strcmp字符串比較strstr字符串查找strDelChar字符串刪除字符strrev字符串反序memmove拷貝內存塊strlen字符串長度)

RR size art 刪除字符 rcp 技術分享 count oid space 1.strcpy字符串拷貝拷貝pStrSource到pStrDest,並返回pStrDest地址(源和目標位置重疊情況除外) char *strcpy(char *pStrDest

ABAP中利用函式WS_DELIVERY_UPDATE進行VL02N發貨過賬時獲取憑證(mblnr)

某專案中,做wms介面時,根據wms傳過來的引數,利用函式WS_DELIVERY_UPDATE進行發貨過賬(vl02n發貨過賬),而函式本身是不返回憑證號的,但客戶需求要在介面中返回過賬成功的憑證號,可以下幾種方式獲取到憑證號: 方法一:這種方法是最原始的方法,判斷函式執行

替換插入刪除獲取

<?php // fedora-centos-apache-php-cannot-write-delete-file // getsebool -a|grep httpd // httpd_unified --> off // setsebool -P htt

VS程式設計使用替換的方式將程式碼中字串以一字元以標誌(常以逗號)進行換分行顯示。(相當於按回車鍵)

1、從一行,通過替換變成多行,相當於按回車  替換之前: 替換之後:   步驟:  1,選中要替換的程式碼 2、按ctrl + H 兩個鍵,調出替換視窗, 3、在替換視窗進行如下設定: 4、點選替換所有按鈕

linux 下vim中關於刪除或者全部刪除的命令 ZZ

1,先開啟某個檔案: vim filename 2,轉到檔案結尾 在命令模式輸入 G 3,轉到10行 在命令模式輸入 10G 4,刪除所有內容:先用G 轉到檔案尾,然後使用下面命令: :1, .d 5,刪除第10行到第20行的內容:先用20G轉到第20行,然後使用下面命令:

Linux Vi 刪除全部內容刪除到結尾刪除段內容 的方法

1.開啟檔案 vi filename 2.轉到檔案結尾 G 或轉到第9行 9G 3.刪除所有內容(先用G轉到檔案尾)(%$$#^71267*&%2)我型我塑www.5x54.com ,使用: :1,.d 或者刪除第9行到第200行的內容(先用200G轉到第200

vi命令刪除刪除至結尾

用到兩個命令 。 1  刪除xx行至xx行。 : 1,10d 命令解釋:刪除第一行到第10行2  直接跳轉到檔案結尾行  按下大寫的g  --- G 在文尾輸入  : 1,.d 命

ACMNO.20 C語言-插入佇列 已有一個已排好的9個元素的陣列今輸入一個數要求按原來排序的規律將它插入陣列中。 輸入 第一行原始數列。 第二需要插入的數字。

題目描述 已有一個已排好的9個元素的陣列,今輸入一個數要求按原來排序的規律將它插入陣列中。 輸入 第一行,原始數列。 第二行,需要插入的數字。 輸出 排序後的數列 樣例輸入 1 7 8 17 23 24 59 62 101 50 樣例輸出 1

python pymysql 進行單行多全部結果處查詢以及資料庫單行資料插入問題

config.py # coding=utf-8 [config] ip=192.168.229.128 port=3306 user=root password=123456 db_name=betadb pymysql_demo.py # coding=utf-

qt下的時鐘程序(簡單美麗繼承自QWidget的Clock用timer調用update刷新然後使用paintEvent作畫就超詳細中文註釋)good

循環 連接 定位 根據 定時器 img cal widget tran 最近抽空又看了下qt,發現用它來實現一些東西真的很容易比如下面這個例子,繪制了個圓形的時鐘,但代碼卻清晰易懂[例子源自奇趣科技提供的例子]因為清晰,所以就只寫註釋了,吼吼其實也就這麽幾行代碼頭文件 /

python--文件操作刪除

literal continue new imp odi comment server enc pre 方法一: import shutil with open(‘/path/to/file‘, ‘r‘) as f: with open(‘/path/to/f

CXGRID用法(取、列值;定位選中等等)

定位 caption gdt true llc bind ado edt databind Delphi Cxgrid獲取選中行列,排序規則,當前正在編輯的單元格內的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 當前行號

2017年7月22日~23日深圳市共創力為上市企業提供整機設計工程內訓服務!

設計 最終 ges 培訓 學員 公司 團隊 com 開始 2017年7月22日~23日,深圳市共創力咨詢資深顧問李齊天老師為某上市企業提供了《整機系統設計方法與實踐》的內訓服務!該公司是武漢光谷著名的通信企業,研發團隊超過1000多人,此次培訓的引進公司領導層經過多方的選

最強自定義PHP集成環境系統缺失dll和vc也能正常運

缺少 免費 alt 系統 演示 php環境 com 解決 解決方案 PHPWAMP支持iis、apache、nginx等web服務器,並全部支持php多版本同時運行,無限自定義mysql、php PHPWAMP支持32和64,支持自定義自動匹配系統所需dll和vc,純綠化無

系統類擴展方法實現對所有類或種類擴展自定義方法

系統 方法 extension lis empty sem sta 實現 .... 擴展方法的格式: 1、必須把擴展方法寫在靜態類中 2、擴展方法的第一個參數必須加 "this" 修飾 例如,對所有object對象的擴展方法IsEmptyOrNull,判斷對象是否為空,ob

JavaScript 對圖像進行(追加插入替換刪除

刪除 簽名 添加節點 child bject 寬度 har random 全部 JavaScript 對圖像進行(追加,插入,替換,刪除) 本次所學內容: document.querySelector(‘.container‘)      這個是可以查找單

支持源碼多重加密將網站一鍵生成EXE文件運封裝網站源碼演示運

php整站打包工具 php網站打包成exe php網站生成exe php項目怎麽打包成exe php整站打包程序 PHP打包器應用場景:做好網站程序後,發布給用戶看,但是不想泄露源碼,可以選擇“封裝源碼生成EXE文件”,建議封裝前先用zend等加密代碼,可以起到雙重保險,對方在破解軟件的同

windows servernginx安裝,配置,運nodeJS後端的web項目的實現以及錯誤分析及解決方法

lease args app clu ali real-ip directory 很多 命令 如果對nodeJS的後端的系統,源代碼在github上,https://github.com/saucxs/nodeJSBlog ,如果覺得可以,請請star並fork項目 項目

全國排名前十名大型軟件公司數據庫筆試題分享給大家

null trunc ora 筆試 性能優化 部分 常用 軟件公司 java 1)在java線程中wait和sleep方法的不同? 2)truncate與delete的區別? 3)說出一些常用的類,包,接口,請各舉5個 4)數組有沒有length()這個方法? String