ページ 1 / 1
ファイルの読み書き
Posted: 2010年6月30日(水) 13:53
by トマト
テキストファイルの読み書きを行っています。
複数のファイルをいくつも読み込んで、一つのファイルに出力するようにしました。
以前に質問させて頂き 文字列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:ファイルの読み書き
Posted: 2010年6月30日(水) 14:04
by シエル
>今回は、そのプログラムに渡すファイルの部分を変更しなければならなくなり
>永久ループ的になってしまったので
読み込むファイル名が変わったということですか?
また、どの部分が永久ループになってしまったのかを、明確にしてください。
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 14:19
by トマト
読み込みたいファイル名は可変です。
[___] ./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:ファイルの読み書き
Posted: 2010年6月30日(水) 14:26
by toyo
if(!(fcombi = fopen("combi.txt", "r"))){
でfcloseしないでfopenしているのが原因では
一旦fcloseするかfreopenを使ったらどうでしょう
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 14:30
by シエル
combi.txtを一回fcloseしてから、fopenしてみるとどうなりますか?
追記:
すいません。かぶりました。。。

Re:ファイルの読み書き
Posted: 2010年6月30日(水) 14:45
by トマト
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");
}
ですが、結果は同じでした。ファイルは無事に作成されていましたが
プロンプトが返って来ない状態です。
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 14:58
by シエル
実際にブレークポイントを↓の中のどこかに設定してデバッグし、
argcの値や、どのようにループしているのかを教えてください。
while(--argc){
++argv;
while(fgets(tmp, 1024, fcombi)){
if(!strstr(tmp, "iso")) continue;
if(AddString(tmp)) continue;
}
}
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 15:31
by トマト
ブレークポイントが置けないので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」のある文字列のみ出力されてプロンプトが返ってこない。
状態でした。
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 15:46
by シエル
argcの値を見れば、無限ループするのは明らかなのではないかと。
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 15:50
by toyo
なんでargcがマイナスにと思ってよく見たら
while(--argc){
を2回実行してるんですね
1回目のwhileでargcは0になってますからだめですよ
カウンタを複数回使うならforループで回したほうがいいかも
for ( i = 1; i < argc; i++)
Re:ファイルの読み書き
Posted: 2010年6月30日(水) 16:06
by トマト
ありがとうございました。きちんとプログラムがとまりました。
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:ファイルの読み書き
Posted: 2010年6月30日(水) 18:16
by トマト
すみません。
>while(--argc){
>を2回実行してるんですね
>1回目のwhileでargcは0になってますからだめですよ
argcは0になっていました。
ありがとうございました!

Re:ファイルの読み書き
Posted: 2010年6月30日(水) 18:19
by トマト
解決いたしました。本当にありがとうございました