簡體   English   中英

轉到文件中的特定行並閱讀

[英]Go to a specific line in file and read it

問題描述

我有一個包含一組行的文件。 一種

文件1:

"Hello How are you"

"The cat ate the mouse"

基於用戶輸入的行的開頭和結尾。 我想轉到文件中的每一行並將其提取。

對於例子,如果用戶鍵入1,然后17我得去1號線,有一個大小的17個字符。 他可以提供文件中的任何行號。

從C ++文件的特定位置閱讀了以下Answer Read 但是我不是很明白。 為什么線必須相同大小? 如果我有關於文件中每行開頭和結尾的信息。 為什么我不能直接訪問它?


源代碼

我嘗試使用以下代碼,該代碼的靈感來自使用Seekg從文件中的指定位置讀取數據,但是為什么我無法提取這些行?

    #include <fstream>
    #include <iostream>

    using namespace std::

    void getline(int, int, const ifstream & );
    int main()
    {
      //open file1 containing the sentences
      ifstream file1("file1.txt");

      int beg = 1;
      int end = 17;
      getline(beg,end, file1);

      beg = 2;
      end = 20;
      getline(beg,end, file1);

      return 0;
    }

void getline(int beg, int end, const ifstream & file)
{
   file.seekg(beg, ios::beg); 
   int length = end;

   char * buffer = new char [length];

   file.read (buffer,length);

   buffer [length - 1] = '\0'; 

   cout.write (buffer,length);
   delete[] buffer;
}

該代碼似乎使用行號作為字節偏移量。 如果要偏移“ 1”,則文件將向前搜索1個字節,而不是1行。 如果要偏移2,文件將向前尋找2個字節,而不是2行。

要查找特定的行,您需要讀取文件並計算換行的次數,直到到達所需的行為止。 已經有執行此操作的代碼,例如std::getline() 如果您尚不知道所需行的確切字節偏移量,則可以調用std::getline()等於所需行號的次數。

還要記住,文件的第一個字節位於偏移量0而不是偏移量1,並且不同的平台使用不同的字節來指示行的結尾(例如,在Windows上是"\\r\\n" ,在Unix上是"\\n" )。 如果您使用庫函數讀取行,則應注意行尾。

暫無
暫無

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

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