4

開始位置と終了位置を指定して、ファイルの内容の一部を取得したい。

私はseekgそれを行うために関数を使用していますが、関数は開始位置のみを決定しますが、終了位置をどのように決定しますか。

ファイルの特定の位置からファイルの最後までのコンテンツを取得し、各行を配列の項目に保存するコードを作成しました。

ifstream file("accounts/11619.txt");
if(file != NULL){
   char *strChar[7];
   int count=0;
   file.seekg(22); // Here I have been determine the beginning position
   strChar[0] = new char[20];
   while(file.getline(strChar[count], 20)){
      count++;
      strChar[count] = new char[20];
}

たとえば
、ファイルの内容は次のとおりです。

11619.
Mark Zeek.
39.
beside Marten st.
2/8/2013.
0

次の部分だけを取得したい:

39.
beside Marten st.
2/8/2013.
4

3 に答える 3

2

fstreamのリファレンスを読んでください。seekg関数では、必要なものを定義しますios_base。私はあなたが探していると思います:

file.seekg(0,ios_base::end)

編集:または、これが欲しいですか?( tellgリファレンスから直接取得し、少し変更して、私が薄い空気から引き出したランダムなブロックを読み取ります)。

// read a file into memory
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream

int main () {
  std::ifstream is ("test.txt", std::ifstream::binary);
  if (is) {
    is.seekg(-5,ios_base::end); //go to 5 before the end
    int end = is.tellg(); //grab that index
    is.seekg(22); //go to 22nd position
    int begin = is.tellg(); //grab that index

    // allocate memory:
    char * buffer = new char [end-begin];

    // read data as a block:
    is.read (buffer,end-begin); //read everything from the 22nd position to 5 before the end

    is.close();

    // print content:
    std::cout.write (buffer,length);

    delete[] buffer;
  }

  return 0;
}
于 2013-08-02T05:36:04.453 に答える
1

最初に使用できます

seekg()

読み取り位置を設定するには、次を使用できます

read(buffer,length)

意図を読み取る。

たとえば、test.txt というテキスト ファイルの 6 文字目から 10 文字を読みたい場合は、次の例をご覧ください。

#include<iostream>
#include<fstream>

using namespace std;

int main()
{
std::ifstream is ("test.txt", std::ifstream::binary);
if(is)
{
is.seekg(0, is.end);
int length = is.tellg();
is.seekg(5, is.beg);

char * buffer = new char [length];

is.read(buffer, 10);

is.close();

cout << buffer << endl;

delete [] buffer;
}
return 0;
}

しかし、あなたの状況では、getline() を使用しないのはなぜですか?

于 2013-08-02T05:58:15.787 に答える