• ベストアンサー

テキスト処理したいのですが

テキストの例えば5文字目から10文字目を切り出して新しいテキストファイルに保存したいのですがなにかいい方法はありますか C言語初心者なのですみません。

  • kewa
  • お礼率18% (7/37)

質問者が選んだベストアンサー

  • ベストアンサー
  • sueoka
  • ベストアンサー率38% (24/62)
回答No.2

こんにちわ まず、読み込むテキストデータですが、 これは「改行」交じりのデータですか? それとも、1行目にずらずらーっとデータが羅列されているタイプでしょうか? 後者の場合、「バイナリモード」での読み込みのほうが適しているかもしれません。 inStream = fopen( INFILE, "rb") 次に、抽出したい項目の位置ですが、それは固定ですか? 固定で無い場合は「strstr」と言う関数で抽出場所を探す必要があります。 p = strstr( src, "S1100") で、実際の抽出方法ですが、 まずは「fseek」と言う関数でデータを見る場所を設定します。 fseek( inStream, 200, SEEK_SET); // 先頭が0になります SEEK_SETは「ファイルの先頭から」と言う意味です。 #strstrを使った場合は「fseek( inStream, p, SEEK_SET)」です 次に、その位置からデータを必要な分だけ抽出します。 fgets( src, 6, inStream); #たしか、必要な文字数+1を指定する必要があったようなないような・・・ 自動で「\0」は付けてくれないので、自分で付けます。 src[5] = '\0'; あとはこのsrcの中身を書き出せばOKです。 [指摘] 1.kewaさんのソースにはファイルを書き出す部分が見当たりませんが、 これは単なる書き忘れ? 2.srcの領域が確保されていませんので、fgetsの部分でエラーが出るかと思われます。 char src[256]; などにしておかないとマズイですね。 さて、こんな説明で分かりましたでしょうか?

kewa
質問者

補足

ありがとうございます。試してみたら、うまくいきました。 ただ、固定長データは、改行まじりで、あのデータが何行も あって、同じ部分をEOFまで繰り返し抜き出す処理をした いのですが、いい方法はありますか? ご指摘のファイルを書き出す部分は、fputs関数を書きました。

その他の回答 (1)

  • sssohei
  • ベストアンサー率33% (33/98)
回答No.1

分からないのは「テキストファイルから読み出す」?、「5文字目から10文字目を切り出して」、「新しいテキストファイルに保存」のどれかですか?それとも全てでしょうか? 問題を絞り込まれた方が良いです。 さもないと、望まれた答えが返ってこないかも知れません。 とりあえず、書いてみます。分からないところやはずしているところがあれば、補足をお願いします。 > 5文字目から10文字目を切り出して #inlcude <string.h> と先の方に書いておいて、(strncpy利用のため) src に元の文字列が入っているとすると、 char dst[6]; // 5文字+\0 で6文字分 strncpy(dst, src+5, 5); // 切り出す dst[5] = '\0'; の様にします。 >新しいテキストファイルに保存 #include <stdio.h> と先の方に書いておいて(fxxxx利用のために) FILE *fp; if ((fp = fopen("out.txt", "w")) == NULL) { // out.txt にファイル名 // 開けなかったときのエラー対策 perror("can't open file!"); return; } fputs(str, fp); // str は書き込む文字列 fclose(fp); 参考URLで関数の解説が検索出来ますので分からない関数は調べてみてください。

参考URL:
http://www.linux.or.jp/JM/
kewa
質問者

補足

試してみました。 わからないのは切り出す部分です。 テキストは固定長データです。たとえば、 200,20011108A 10ム011108 5208A 000AB857840110000010001000010000000000001570000000000000000000000000157956441195131418520011108S1100000000000000000000000000000000000000000000000000000000000000000000000000 というデータから'S1100'という部分だけを切り出したいのですが。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define INFILE "deta1.txt" /* 入力ファイル名 */ #define OUTFILE "kekka.txt" /* 出力ファイル名 */ int main(void) { int d; char dst[6]; char *src; FILE *inStream, *outStream; /* 入力用ファイルのオープン */ if ((inStream = fopen(INFILE, "r")) == NULL) { printf("ファイル%sがオープンできません。\n", INFILE); exit(1); } /* 出力用ファイルのオープン */ if ((outStream = fopen(OUTFILE, "w")) == NULL) { printf("ファイル%sがオープンできません。\n", OUTFILE); exit(1); } while((*fgets(src,200,inStream)) != EOF) { strncpy(dst, src+10, 5); // 切り出す dst[5] = '\0'; } /* ファイルのクローズ */ fclose(outStream); fclose(inStream); return 0; } というコードを書いてみましたが、うまくいきません。教えてください。

関連するQ&A

  • テキストファイルの内のデータ処理について

    はじめまして。 C言語に関しての初心者の者です。 どうぞよろしくお願いします。 テキストファイルで連続したコンマ区切りのデータがあります。 一部分を示すと 0.000,1.000,5.000,0.000,・・・ のように改行等なく数値が約7万個ほど連なったデータです。 このデータの数値を一列に並べてエクセルファイル上に 0.000 1.000 5.000 0.000 ・ ・ ・ と書き込み、保存したいのですが、どう手を付けていけば良いか分かりません。 どのような手順でプログラムを書けばよいかご教授いただけないでしょうか。 よろしくお願いいたします。

  • C言語のテキストファイルの読込み

    必要に迫られてC言語でテキストファイルの読込みを行う プログラムを作成しなければならなくなりました。 whileとfscanfを用いて書式を指定して一行ずつ読込むことができる ということは知っていますが、その際、たとえば読み込むファイルが 20行のテキストファイルだったとして、10行目から読込みを 行いたい場合はどのようにプログラムを書けばいいのでしょうか? なにぶんC言語初心者ですのでよろしくお願いします。

  • テキスト処理の速度の速い言語

    最大80MBまで増加するテキストファイルがあります。 あるアプリケーションのログファイルです。 最大80MBまで達します。 80MBまで達したら新しいファイルが作成され、 そこにログが出力されます。 このログファイルの中身を読み取り、 ある処理をして、計算結果や、必要な箇所を別のテキストファイルに 出力するプログラムを作成しました。言語はVBScriptです。 このプログラムを10分に一度実行する必要があります。 そこで問題になってしまったのが、処理時間です。 前回の処理が終わらないまま10分が経過して 次の処理が開始されてしまうのです。 特にまずいのがデータ量の多い期末や年度末です。 そこでVBScriptよりも速くテキスト処理を行える言語を教えて下さい。 BATでもJScriptでもPerlでもCでもC++でもJavaでも何でも良いです。 教えて下さい。 よろしくお願いします。

  • illustratorでアウトライン化した文字をテキスト化

    illustratorで文字をアウトライン化する前の状態でファイルを保存せずに、アウトライン化してしまった状態でファイルを保存してある場合に、その文字をテキストファイルに吐き出すかテキストとしてコピぺできる方法はないでしょうか?

  • テキストファイルを読み込んでランキング付けする方法

    タイトルのとおりですが、サーバーに保存してあるテキストファイルを読み込んで、 出現回数の多かったものを表示したいと考えています。 言語はRubyかできればJava scriptでと考えています。 テキストファイルには A B C A D のように一行ずつ語句が保存してあります。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • VBAで、テキストファイルの編集

    プログラムの初心者です。 困ってます。お教え下さい。 VBA上の制御で、あるテキストファイルのデータをコピーして、 別のテキストファイルに貼り付けして、別保存したいのですが、 分かりません。 テキストファイルを開くだけでしたらできたのですが、 それからが・・・・ Call Shell("C:\WINNT\system32\notepad.exe c:\text1.txt") すいません、お教え下さい。

  • 複数あるテキストボックス中のテキスト取り出し

    microsoft officeのテキストボックスについてお尋ねします。windows xp SP3, office2007を使っています。複数あるテキストボックス内のテキストをすべて取り出してテキストファイルもしくはワードファイルを作りたいです。テキストボックスが大量にあるため、コピー&ペーストしていると非常に時間がかかります。良い方法をご存じの方がいらっしゃいましたら教えて頂きたく存じます。 ファイルをwebページとして保存してhtmlファイルをブラウザで開き、テキストファイルとして保存するとテキストボックス内を取り出せるという情報がありました。試してみたのですが、テキストボックス部分は画像になってしまい、テキストを取り出せません。どこかやり方がまずいのでしょうか。この方法も含め何か良い知恵がありましたらお貸しください。 テキストボックスについて質問させていただいていますが、最終的には通常のテキスト、オブジェクト上のテキスト(テキストボックスや図形上の文字)などファイル内にあるすべての文字をテキストファイルに落とし込みたいと思っています。なお、対象ファイルはエクセル、ワード、パワポと様々です。長くなって申し訳ありませんがよろしくお願いいたします。

  • Webページ保存によるテキストボックス内文字の抽出

    次の課題を考えています。初心者ですのでよろしくお願いします。 課題 Excel2007のシートに複数のテキストボックスを作成して、このテキストボックス内の文字(テキスト)をExcelのセルまたはWordにコピーしたいと考えています。OSはWin7です。 方法 Windows XP SP2とワード2003の場合に関して、下記URL http://okwave.jp/qa/q4673231.html に説明があったので、これを参照して 1 Excel2007ファイルを名前をつけて保存 → Webページで保存 2 保存されたhtmlファイルをブラウザで開き、それを名前をつけて保存(テキストファイル選択) しかしながら保存されたテキストファイルをメモ帳で開いてみてもテキストボックス内の文字は保存されていません。 Webページで保存した場合、filesフォルダ内にテキストボックスがそのままイメージで保存されているので、この方法ではむずかしいのかもしれないと思っていますが、なんとかWebページ保存の方法でテキストボックス内の文字を抽出したいと考えていますので、どなたかよろしくお願いします。

  • テキストファイル内の検索とカウント

    C++言語についての質問です。 下記の処理をするにはどのようにしたら宜しいでしょうか? ********* ある変数で取得した値が、テキストファイル上にいくつ存在するか を調べる。 ※テキストファイルにはスペースも含まれています。 ********** 初心者のため、参考書を見ながら試行錯誤していますが、 なかなかうまくいかない為、ご質問させて頂きました。 よろしくお願いします。

  • VBAでUTF-8テキストファイル作成したい

    VBA,文字コードなどにあかるくない初心者です。 VBAを利用して、エクセルのとあるセルに記載されている文字を UTF-8形式でテキストファイルに出力させたいと考えています。 (多言語対応のため・・・、韓国語や中国語でセルに記載された文字を  UTF-8形式でテキストファイルに文字化けしないよう出力させたいためです。) どのように実現が可能か、いくつか検索をしてみましたが 難しくてわかりませんでした。 VBAのサンプルコードを教えていただけないでしょうか。 もしくは、初心者でもわかりやすい実現方法が記載されたサイトを教えていただけないでしょうか。 よろしくお願い致します。 ※今文字コードを意識せずに下記のようなVBAを書いています。(簡略化して記載しています。) Sub test() Open "C:\Sample\Data.txt" For Output As #1 'ファイルを新規作成 'データ書き込み Print #1, Cells(1, 1) Close #1 End Sub