アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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];
などにしておかないとマズイですね。

さて、こんな説明で分かりましたでしょうか?

この回答への補足

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

ご指摘のファイルを書き出す部分は、fputs関数を書きました。

補足日時:2002/02/04 22:08
    • good
    • 0

分からないのは「テキストファイルから読み出す」?、「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/

この回答への補足

試してみました。
わからないのは切り出す部分です。
テキストは固定長データです。たとえば、
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;
}
というコードを書いてみましたが、うまくいきません。教えてください。

補足日時:2002/02/03 22:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!