簡體   English   中英

C:在不搜索的情況下寫入文本文件中的特定行

[英]C: Write to a specific line in the text file without searching

你好我有文本文件:

14 
5 4
45 854
14 
4 
47 5

我需要將文本寫到特定行。 例如第4行(我是否要附加文本還是重寫整行都沒有關系):

14 
5 4
45 854
14 new_text
4 
47 5

我發現了功能fseek()。 但是在文檔中寫的


fseek(文件指針,偏移量,位置);

“偏移量指定了要從指定位置移出的位置數(字節)。”


但是我不知道被咬的次數。 我只知道行數。 怎么做? 謝謝

您無法做到這一點,(文本)文件不可行尋址。

另外,您不能在文件中間插入數據。

最好的方法是“假脫機”到新文件,即逐行讀取輸入,然后將其寫入到新文件即輸出。 然后,您可以輕松地跟蹤您所在的行,並執行所需的任何操作。

我將假設您將對單個文件執行多次操作,這樣您最好為每個換行符的位置編制索引,例如可以使用如下函數:

long *LinePosFind(int FileDes)
{
    long * LinePosArr = malloc(500 * sizeof(long));
    char TmpChar;
    long LinesRead = 0;
    long CharsRead = 0;
    while(1 == read(FileDes, &TmpChar, 1))
    {
        if (!(LinesRead % 500)
        {
            LinePosArr = realloc(LinePosArr, (LinesRead + 500) * sizeof(long));
        }
        if (TmpChar == '\n')
        {
            LinePosArr[LinesRead++] = CharsRead;
        }
        CharsRead++;
    }
    return LinePosArr;
}

然后,您可以保存所有換行符的索引以供重復使用。

之后,您可以像這樣使用它:

long *LineIndex = LinePosFind(FileDes);
long FourthLine = LineIndex[3];

注意:我沒有檢查過這段代碼,只是從頭開始編寫,因此可能需要修復。此外,如果在生產環境中使用該代碼,則應添加一些錯誤檢查malloc並讀取和重新分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM