ファイルの読み書き
ファイルの読み書き
テキストファイルの読み書きを行っています。
複数のファイルをいくつも読み込んで、一つのファイルに出力するようにしました。
以前に質問させて頂き 文字列1から 文字列2を検索するとの 書き方を教えていただきました。
今回は、そのプログラムに渡すファイルの部分を変更しなければならなくなり
永久ループ的になってしまったので
どう直したら良いか相談させて頂こうと思い書き込みさせて頂きました。
初歩的な問題で申し訳ありませんがもう分からなくなってしまって、よろしくお願いします。
if(argc < 2)
{
printf("Usage : XTYPE filename1 [filename2 ...]\n");
return -1;
}
if((fnotice = fopen( "notice.txt", "w" )) == NULL)
{
printf("can not open write file.");
return -2;
}
if((fcombi = fopen( "combi.txt", "w" )) == NULL)
{
printf("can not open write file.");
return -3;
}
while(--argc)
{
++argv;
if((fp = fopen( *argv, "r" )) == NULL)
{
printf("can not open file. %s\n", *argv);
return -2;
}
while(fgets(arpinfo,sizeof(arpinfo),fp))
{
printf("%s",arpinfo);
fprintf(fcombi, "%s", arpinfo);
}
}
if(!(fcombi = fopen("combi.txt", "r"))){
printf("can not open file.\n");
}
while(--argc){
++argv;
while(fgets(tmp, 1024, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
複数のファイルをいくつも読み込んで、一つのファイルに出力するようにしました。
以前に質問させて頂き 文字列1から 文字列2を検索するとの 書き方を教えていただきました。
今回は、そのプログラムに渡すファイルの部分を変更しなければならなくなり
永久ループ的になってしまったので
どう直したら良いか相談させて頂こうと思い書き込みさせて頂きました。
初歩的な問題で申し訳ありませんがもう分からなくなってしまって、よろしくお願いします。
if(argc < 2)
{
printf("Usage : XTYPE filename1 [filename2 ...]\n");
return -1;
}
if((fnotice = fopen( "notice.txt", "w" )) == NULL)
{
printf("can not open write file.");
return -2;
}
if((fcombi = fopen( "combi.txt", "w" )) == NULL)
{
printf("can not open write file.");
return -3;
}
while(--argc)
{
++argv;
if((fp = fopen( *argv, "r" )) == NULL)
{
printf("can not open file. %s\n", *argv);
return -2;
}
while(fgets(arpinfo,sizeof(arpinfo),fp))
{
printf("%s",arpinfo);
fprintf(fcombi, "%s", arpinfo);
}
}
if(!(fcombi = fopen("combi.txt", "r"))){
printf("can not open file.\n");
}
while(--argc){
++argv;
while(fgets(tmp, 1024, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
Re:ファイルの読み書き
>今回は、そのプログラムに渡すファイルの部分を変更しなければならなくなり
>永久ループ的になってしまったので
読み込むファイル名が変わったということですか?
また、どの部分が永久ループになってしまったのかを、明確にしてください。
>永久ループ的になってしまったので
読み込むファイル名が変わったということですか?
また、どの部分が永久ループになってしまったのかを、明確にしてください。
Re:ファイルの読み書き
読み込みたいファイル名は可変です。
[___] ./fileOpen sample1 sample2 sample3 sample4
と引数に読み込みたいファイルを書き連ねていき、
while(--argc)
{
++argv;
if((fp = fopen( *argv, "r" )) == NULL)
{
printf("can not open file. %s\n", *argv);
return -2;
}
while(fgets(arpinfo,sizeof(arpinfo),fp))
{
printf("%s",arpinfo);
fprintf(fcombi, "%s", arpinfo);
}
}
fgetsで combi.txt(固定ファイル名)に読み込みたいファイルの中身が全て書き込まれたのを確認しました。
そのあとに、combi.txt内に必ず「iso」と書いてある文字列があるのですが
strstrで探している所で(<-プログラム内部処理の)
iso.3.6.1.2.1.4.22.1.2.9.192.168.64.90 = Hex-STRING: 00 AB B0 94 39 31
iso.3.6.1.2.1.4.22.1.2.9.192.168.64.99 = Hex-STRING: 00 A0 48 4E 67 80[EOF]
:
:
プロンプトが返ってこないんです。(プログラムが終了しない)
分かりにくい点あれば書き直します。よろしくお願いします
[___] ./fileOpen sample1 sample2 sample3 sample4
と引数に読み込みたいファイルを書き連ねていき、
while(--argc)
{
++argv;
if((fp = fopen( *argv, "r" )) == NULL)
{
printf("can not open file. %s\n", *argv);
return -2;
}
while(fgets(arpinfo,sizeof(arpinfo),fp))
{
printf("%s",arpinfo);
fprintf(fcombi, "%s", arpinfo);
}
}
fgetsで combi.txt(固定ファイル名)に読み込みたいファイルの中身が全て書き込まれたのを確認しました。
そのあとに、combi.txt内に必ず「iso」と書いてある文字列があるのですが
strstrで探している所で(<-プログラム内部処理の)
iso.3.6.1.2.1.4.22.1.2.9.192.168.64.90 = Hex-STRING: 00 AB B0 94 39 31
iso.3.6.1.2.1.4.22.1.2.9.192.168.64.99 = Hex-STRING: 00 A0 48 4E 67 80[EOF]
:
:
プロンプトが返ってこないんです。(プログラムが終了しない)
分かりにくい点あれば書き直します。よろしくお願いします
Re:ファイルの読み書き
if(!(fcombi = fopen("combi.txt", "r"))){
でfcloseしないでfopenしているのが原因では
一旦fcloseするかfreopenを使ったらどうでしょう
でfcloseしないでfopenしているのが原因では
一旦fcloseするかfreopenを使ったらどうでしょう
Re:ファイルの読み書き
while(--argc)
{
++argv;
if((fp = fopen( *argv, "r" )) == NULL)
{
printf("can not open file. %s\n", *argv);
return -2;
}
while(fgets(arpinfo,sizeof(arpinfo),fp))
{
printf("%s",arpinfo);
fprintf(fcombi, "%s", arpinfo);
}
}
fclose(fcombi); (<-ココに入れました!)
if(!(fcombi = fopen("combi.txt", "r"))){
printf("can not open file.\n");
}
ですが、結果は同じでした。ファイルは無事に作成されていましたが
プロンプトが返って来ない状態です。
{
++argv;
if((fp = fopen( *argv, "r" )) == NULL)
{
printf("can not open file. %s\n", *argv);
return -2;
}
while(fgets(arpinfo,sizeof(arpinfo),fp))
{
printf("%s",arpinfo);
fprintf(fcombi, "%s", arpinfo);
}
}
fclose(fcombi); (<-ココに入れました!)
if(!(fcombi = fopen("combi.txt", "r"))){
printf("can not open file.\n");
}
ですが、結果は同じでした。ファイルは無事に作成されていましたが
プロンプトが返って来ない状態です。
Re:ファイルの読み書き
実際にブレークポイントを↓の中のどこかに設定してデバッグし、
argcの値や、どのようにループしているのかを教えてください。
while(--argc){
++argv;
while(fgets(tmp, 1024, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
argcの値や、どのようにループしているのかを教えてください。
while(--argc){
++argv;
while(fgets(tmp, 1024, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
Re:ファイルの読み書き
ブレークポイントが置けないのでprintfしました。
while(--argc){
++argv;
printf("argc [%d]",argc); (<-ココに設置)
while(fgets(tmp, STRING_MAX, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
23178]argc [-1123179]argc [-1123180]argc [-1123181]argc [-1123182]argc [-1123183]argc [-1123184]argc [-1123185]argc [-1123186]argc [-1123187]argc [-1123188]argc [-1123189]argc [-1123190]argc [-1123191]argc [-1123192]argc [-1123193]argc [-1123194]argc [-1123195]argc [-11
ずっと繰り替えしてました。
while(fgets(tmp, STRING_MAX, fcombi)){
if(!strstr(tmp, "iso"))
{
continue;
}
else
{
printf("%s",tmp);
}
の場合には、「iso」のある文字列のみ出力されてプロンプトが返ってこない。
if(AddString(tmp))
{
continue;
}
else
{
printf("%s",tmp);
}
の場合も「iso」のある文字列のみ出力されてプロンプトが返ってこない。
状態でした。
while(--argc){
++argv;
printf("argc [%d]",argc); (<-ココに設置)
while(fgets(tmp, STRING_MAX, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
23178]argc [-1123179]argc [-1123180]argc [-1123181]argc [-1123182]argc [-1123183]argc [-1123184]argc [-1123185]argc [-1123186]argc [-1123187]argc [-1123188]argc [-1123189]argc [-1123190]argc [-1123191]argc [-1123192]argc [-1123193]argc [-1123194]argc [-1123195]argc [-11
ずっと繰り替えしてました。
while(fgets(tmp, STRING_MAX, fcombi)){
if(!strstr(tmp, "iso"))
{
continue;
}
else
{
printf("%s",tmp);
}
の場合には、「iso」のある文字列のみ出力されてプロンプトが返ってこない。
if(AddString(tmp))
{
continue;
}
else
{
printf("%s",tmp);
}
の場合も「iso」のある文字列のみ出力されてプロンプトが返ってこない。
状態でした。
Re:ファイルの読み書き
なんでargcがマイナスにと思ってよく見たら
while(--argc){
を2回実行してるんですね
1回目のwhileでargcは0になってますからだめですよ
カウンタを複数回使うならforループで回したほうがいいかも
for ( i = 1; i < argc; i++)
while(--argc){
を2回実行してるんですね
1回目のwhileでargcは0になってますからだめですよ
カウンタを複数回使うならforループで回したほうがいいかも
for ( i = 1; i < argc; i++)
Re:ファイルの読み書き
ありがとうございました。きちんとプログラムがとまりました。
while(fgets(tmp, STRING_MAX, fcombi)){
if(!strstr(tmp, "iso"))
{
printf("can not iso\n");
continue;
}
else
{
printf("%s",tmp);
}
の場合に何も表示されない
if(AddString(tmp))
{
continue;
}
else
{
printf("%s",tmp);
}
の場合に何も表示されないのは何かあるのでしょうか?
while(fgets(tmp, STRING_MAX, fcombi)){
if(!strstr(tmp, "iso"))
{
printf("can not iso\n");
continue;
}
else
{
printf("%s",tmp);
}
の場合に何も表示されない
if(AddString(tmp))
{
continue;
}
else
{
printf("%s",tmp);
}
の場合に何も表示されないのは何かあるのでしょうか?
Re:ファイルの読み書き
すみません。
>while(--argc){
>を2回実行してるんですね
>1回目のwhileでargcは0になってますからだめですよ
argcは0になっていました。
ありがとうございました!
>while(--argc){
>を2回実行してるんですね
>1回目のwhileでargcは0になってますからだめですよ
argcは0になっていました。
ありがとうございました!
