[要纏整理]C++におけるファイルの読み取りとデータの処理


https://stackoverflow.com/questions/3081289/how-to-read-a-line-from-a-text-file-in-c-c
https://stackoverflow.com/questions/7868936/read-file-line-by-line
http://www.cplusplus.com/reference/cstdio/fscanf/
https://stackoverflow.com/questions/12048576/how-to-find-eof-through-fscanf
https://stackoverflow.com/questions/21589353/cannot-convert-stdbasic-stringchar-to-const-char-for-argument-1-to-i
https://stackoverflow.com/questions/236129/the-most-elegant-way-to-iterate-the-words-of-a-string
https://stackoverflow.com/questions/191757/how-to-concatenate-a-stdstring-and-an-int
http://ysonggit.github.io/coding/2014/12/16/split-a-string-using-c.html
https://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c
https://stackoverflow.com/questions/8960087/how-to-convert-a-char-array-to-a-string
 
  
i fileOut=fopen((std::to_string(i)+".durations").c_str(),"w");

iはint
stringの部分を切り取って、ここでファイル名の接尾辞を交換するために使用して、具体的にはhttp://www.cplusplus.com/reference/string/string/substr/
	string filename=argv[i];
        std::size_t pos=filename.find(".kwy");
        string preName=filename.substr(0,pos);
         fileOut[i-1]=fopen((preName+".durations").c_str(),"w");

cinを使って、coutは省区がファイルの読み書きのこれらの複雑な操作を開くことができるようで、それからterminalでcatを使って、|,>>これらは解決しました
次の問題が発生しました.
テキストは次のようになります.
1 0 37 37 t 2 37 71 34 t 3 71 97 26 t 4 97 137 40 t
次のコードはfscanfが1行を読み終わってから次の行を読むことができなくて、最初の行だけを読んで、それらの値はすべて変わりません
    while(fscanf(fileIn,"%d%d%d%d%c",&epiNum,&startTime,&endTime,&duration,&results)!=EOF)
        {
            cout<" "< 
  
        }
 
   
  

:https://support.microsoft.com/en-us/help/60336/the-fscanf-function-does-not-read-consecutive-lines-as-expected

:

while(fscanf(fileIn,"%d%d%d%d%c%[^
]"
,&epiNum,&startTime,&endTime,&duration,&results)!=EOF)
        {
            cout<" "< 
  
        }

の :
   while(fscanf(fileIn[i-1],"%d%d%d%d%s",&epiNum,&startTime,&endTime,&duration,&results)!=EOF)
        {
            cout< "<
        }
エラーが します. そうですfree():invalid pointer:
これは の には もないので、string resultsは も け れないので、 のように します.
   while(fscanf(fileIn[i-1],"%d%d%d%d",&epiNum,&startTime,&endTime,&duration)!=EOF)
        {
            cout< "<
            fscanf(fileIn[i-1],"%s",&results);
        }
でOKです.
の でresultsを の のcharからstringに したのは、ファイルの の にtとoの2 があるためで、oが れたときにいくつかの が して、どのように いて、 の む が られないことを いて、それからstringに しても の の で に の を むことができない を することができて、 の「」と があるかもしれません. oの は ろに「」??
  • ファイルの み みについてhttps://stackoverflow.com/questions/2799789/what-c-library-do-i-need-to-get-this-program-to-compile
  • #include  //needed for O_RDONLY
    #include  //needed for file open
    #define RL_MEMORY_SIZE 1048576
    int main(int argc,char * argv[] )
    {
        char* TargetWeightFile;
        double* weightTarget=new double[RL_MEMORY_SIZE];
        for(int i=0; i
        int fileT=open(TargetWeightFile,O_RDONLY);
        read(fileT,(char *) weightTarget, RL_MEMORY_SIZE*sizeof(double));
        close(fileT);
        return 1;
    }
  • Makefile
  • について
    TARGET = testWeights
    CC = g++
    
    all:: $(TARGET)
    
    testWeights: testWeights.cpp
    	$(CC) testWeights.cpp -o testWeights  
    
    clean:
    	rm -f $(TARGET) *~ 
    デバッグが な は-g、すなわち
    CC = g++ -g
    は で です
    g++ testWeights.cpp -o -g testWeights  

    そしてデバッグするとき
    gdb testWeights  
    でいいです.
    ただし、testWeightsがパラメータを っている は、gdbを いてデバッグに り、r(runでしょう)で するときにパラメータ(https://stackoverflow.com/questions/14494957/how-do-i-pass-a-command-line-argument-while-starting-up-gdb-in-linux)ですが、 はいつもその にブレークポイントを します.
    Once  gdb  starts, you can run the program using "r args".
    So if you are running your code by:
    $ executablefile arg1 arg2 arg3 

    Debug it on  gdb  by:
    $ gdb executablefile  
    (gdb) r arg1 arg2 arg3