[要纏整理]C++におけるファイルの読み取りとデータの処理
8374 ワード
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
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 についてデバッグが な は-g、すなわちTARGET = testWeights CC = g++ all:: $(TARGET) testWeights: testWeights.cpp $(CC) testWeights.cpp -o testWeights clean: rm -f $(TARGET) *~
は で です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)ですが、 はいつもその にブレークポイントを します.
Oncegdb
starts, you can run the program using "r args".
So if you are running your code by:$ executablefile arg1 arg2 arg3
Debug it ongdb
by:$ gdb executablefile (gdb) r arg1 arg2 arg3