• 締切済み

ファイルでっっっっ!!

またまた質問ですm(_ _)m ファイルに関する質問なんですが。。。。 テキスト内 ---------------------------- a: 546 b: 5343 c: 5 d: 345 e: 3e4r ---------------------------- のような内容のとき文字のみを抽出してresult.txt に保存する方法と 数字のみ抽出して result2.txt に保存する方法を教えてください. fprintf を使えば良いのでしょうか? 初心者でやっとファイルの書き込みがわかってきたところです。 ご協力お願いしますm(_ _)m

noname#45110
noname#45110

みんなの回答

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

(3)e: は文字列ではなく数字と文字が交互にあるものですm(_ _)m これだとすると、フォーマットが画一でないので、行読み込みで処理というわけにはいかないですよね? (数字だけがあるつもりで読むと文字も出てくるから) だとしたら、fscanは使えないので、fgetsとかで1行ずつ読み込んで、 1文字目を連番とする 2文字目が:であることを確認する 3文字目以降を1文字ずつチェックして数字だけの場合はそのまま数値とする 数字と文字が交互にある場合は、それなりの対応をする というロジックになるかと思います。 フォーマットが統一されていないのなら、全部自分でロジックを組むしかありません。

noname#45110
質問者

お礼

ありがとうございますm(_ _)m 1行ずつですか・・分かりました(・ω・)/

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

要求仕様がわからないので、確認させてください。 (1)1行の項目は「1文字[:]数字列」という風に固定フォーマットである? (2)前のfprintfの質問だと、1行に5個書いてありましたが、1行1個でn行である? (3)5行目のe:は数字じゃなくて文字列ですが、これはOKである? ファイルに書くときはfprintf(); 読み込みはfscanf();でできるとおもいますが、 そもそもテキストからの読み込み部分が質問されていないのですが、どうなんでしょうか?

noname#45110
質問者

補足

(1)1行の項目は「1文字[:]数字列」という風に固定フォーマットですm(_ _)m (2)1行1個でn行ですm(_ _)m (3)e: は文字列ではなく数字と文字が交互にあるものですm(_ _)m fscanf で第2引数の書式設定が fscanf(fp, "%d", &val); で""内が 1つの書式設定しかできない(?)ので現在パニックです。("%d" にするとテキストに文字(列)があるので永遠にプログラムが終了しない? と思っています。) ややこしくてすみませんm(_ _)m

関連するQ&A

  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • fprintfを教えて下さいm(_ _)m

    fprintfの使い方は分かるんですが。。。 テキストに書き込みたい内容が 1 4 6 3 12 でしたら %d を使えばいいですが a: 1 b: 4 c: 6 d: 3 e:12 のように文字と数字を書き込むにはどうしたらいいでしょうか?実際に書くと。。。 fprintf( fp, "a: %d", val)といった形では数字しか出来ませんし fprintf( fp, "%c: 1", moji) といった形では文字しか出来ません。 理想はこの上の関数をドッキングした形です。 ご協力お願いしますm(_ _)m

  • ファイルが開けません

    txtファイルをDVD-Rに保存して開こうとしたところ 1分ほどPCが動かなくなり、 「ファイル E:¥テキスト¥文書1.txtを開くことができません。 指定したドライブにディスクがあるか確認してください。」 と言う表示が出てそのファイルを開くことができません。 ちなみにディスクに傷はなく、他のフォルダのtxtファイルの中には開けるものもあります。 どうか対処法を教えてください。

  • 連続でpingを実行するバッチファイルがうまくいきません。

    連続でpingを実行するバッチファイルを作成してたんですが、うまくいきません。 実行すると、"プロセスはファイルにアクセスできません。別のプロセスが使用中です。"って表示されます。 日付と時間はテキストに記載されるんですが、pingの結果が記載されません。 バッチファイルの内容は以下の通りです。 @echo off echo -------------->>d:\result.txt echo PINGテスト結果>>d:\result.txt echo -------------->>d:\result.txt echo 実行年月日 >>d:\result.txt date /T>>d:\result.txt echo 実行時間 >>d:\result.txt time /T>>d:\result.txt for /L %%f in (1,1,254) do ping -n 4 -w 50 192.168.100.%%f>>d:\result.txt exit コマンドプロンプトで、 for /L %f in (1,1,254) do ping -n 4 -w 50 192.168.100.%f>>d:\result.txt と実行すると、pingの結果がテキストに記載されました。 よろしくお願いします。

  • バイナリファイルをテキストファイルに変換する方法を教えて頂けませんか。

    こんにちは。 バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。 以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。 ####プログラム#### #include<stdio.h> int main(){ FILE *fp,*fp2; char str[1024]; //file.txtはバイナリファイルなのでバイナリモードで開く if((fp = fopen("file.txt","rb")) == NULL){ printf("file.txt:open error"); exit(-1); } //out.txtはテキストファイルとして保存したいのでテキストモードで開く if((fp2 = fopen("out.txt","at")) == NULL){ printf("out.txt:open error"); exit(-1); } //一行ずつバイナリファイルをテキストファイルにして保存 while((fgets(str,1024,fp)) != NULL){ printf("%s\n",str); fprintf(fp2,"%s\n",str); } fclose(fp); fclose(fp2); return 0; } ####ここまで#### 以下が出力されたテキストファイル(out.txt)です。 ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^D&ordm;?^QI&egrave;&Ccedil; ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^D&ordm;?^QI0g 酷い文字化けを起こしてしまっています。 解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。

  • テキストファイルの一部置換したファイルをたくさん作りたい

    テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。

  • バッチファイルでのファイル一覧取得

    初心者です。初めてバッチファイルを作成しようと考えていますが、作成方法がわかりません。 環境はWindwsです。 C:\BディレクトリにAというフォルダがありその中に複数のテキストファイルが保存されています。 そのファイルの一覧をBディレクトリ直下のfile_name.txtへ書き込みたいのですが、dirコマンドでファイルの一覧が取得できるのはわかったのですが、ディレクトリ移動してファイルを書き込む方法がわからず困っています。 更にAフォルダには毎日違うテキストファイルが保存されるため、次回バッチを起動した際にはfile_name.txtの中身をクリアして新規に書き込みをしたいと考えています。 初心者で質問内容に不備があるかもしれませんが、ご教授お願いします。

  • C言語でファイルを出力

    ファイルの中に変数をいれて複数のファイルをつくろうとしたのですが、 できたファイルの後に?マークがついてきます。 file = fopen("filename.txt", "w"); for(j=0; j<30; j++){ fprintf(file ,"%d.dat\n",j ); } fclose(file); file2 = fopen("filename.txt", "r"); として、ファイル名を書いたファイルをつくってから、 for(k=0; k<30; k++){ fgets(fp,sizeof(fp),file2); file_out = fopen(fp,"w"); 省略 fprintf(file_out, %e %e \n",a ,b); fclose(file_out); } fclose(file2); をして、30個のファイルを出力すると、 0.dat? 1.dat? 2.dat? . . . 29.dat? というファイルができてしまいます。 ファイルの中はしっかりできています。 なにか解決法を知っている方がおりましたら、どうか教えて下さい。

  • fprintfで出力するファイルのパス指定について

    cで以下のコードを書いています。 file.txtを任意の場所に作りたいのですが どうすればいいのでしょうか。 fopen("c:\file.txt", "r"))と書くとエラーになって しまいました。 void main(void) { FILE *fp; if ((fp = fopen("file.txt", "r")) == NULL) { fprintf ( stderr, "err\n" ); exit (2); } fprintf(fp,"%s\n",a);; fclose(fp); }

  • ディレクトリ内の全てのファイルの中身を操作したい

    ディレクトリ内に、例えば10個のテキストファイル a.txt b.txt c.txt d.txt e.txt f.txt g.txt h.txt i.txt j.txt があり、その中身にそれぞれ 2 6 98 65 4 52 98 100 82 56 という数字が書かれているとします。 これらのファイルの中身の平均をawkを用いたコマンドで表示させたいのですが、自分なりに頑張ったのですが実行できませんでした。 (cat * | awk'{BEGIN{total += $0; i += 1}END{print total/i}' のような感じで) どうすれば実行できるのか、よろしければお教えください。

専門家に質問してみよう