この投稿と同様の質問をしようとしています: C: read binary file to memory, alter buffer, write buffer to file しかし、答えは役に立ちませんでした (私は c++ が初めてなので、すべてを理解できませんでした)それの)
ループでメモリ内のデータにアクセスし、行ごとに処理して、別の形式でファイルに書き込むにはどうすればよいですか?
これは私が持っているものです:
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
int main()
{
char* buffer;
char linearray[250];
int lineposition;
double filesize;
string linedata;
string a;
//obtain the file
FILE *inputfile;
inputfile = fopen("S050508-v3.txt", "r");
//find the filesize
fseek(inputfile, 0, SEEK_END);
filesize = ftell(inputfile);
rewind(inputfile);
//load the file into memory
buffer = (char*) malloc (sizeof(char)*filesize); //allocate mem
fread (buffer,filesize,1,inputfile); //read the file to the memory
fclose(inputfile);
//Check to see if file is correct in Memory
cout.write(buffer,filesize);
free(buffer);
}
どんな助けにも感謝します!
編集 (データの詳細):
私のデータは、5 ~ 10 GB の異なるファイルです。約 3 億行のデータがあります。各行は次のようになります
M359
T359 3520 359
M400
A3592 zng 392
最初の要素は文字で、残りの項目は数字または文字です。行を読み取って処理してから書き込むよりも、行ごとにループする方がはるかに高速になるため、これをメモリに読み取ろうとしています。私は64ビットLinuxでコンパイルしています。さらに明確にする必要がある場合はお知らせください。再びありがとう。
編集 2 switch ステートメントを使用して各行を処理しています。各行の最初の文字によって、行の残りの部分をフォーマットする方法が決まります。たとえば、「M」はミリ秒を意味し、次の 3 つの数値を構造体に入れます。各行には、異なる処理を行う必要がある異なる最初の文字があります。