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/
この回答への補足
試してみました。
わからないのは切り出す部分です。
テキストは固定長データです。たとえば、
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;
}
というコードを書いてみましたが、うまくいきません。教えてください。
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];
などにしておかないとマズイですね。
さて、こんな説明で分かりましたでしょうか?
この回答への補足
ありがとうございます。試してみたら、うまくいきました。
ただ、固定長データは、改行まじりで、あのデータが何行も
あって、同じ部分をEOFまで繰り返し抜き出す処理をした
いのですが、いい方法はありますか?
ご指摘のファイルを書き出す部分は、fputs関数を書きました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- Evernote Evernote(エバーノート)の文字化け 1 2022/04/05 19:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- その他(Microsoft Office) Excelの条件付き書式についての質問です。 2 2022/09/08 01:25
- フリーソフト 数字を縦長に拡大する方法について 7 2022/11/28 08:23
- その他(パソコン・スマホ・電化製品) アクロバットリーダーでテキスト入力して保存すると四角の中に×が入った状態になります 文字化け❓️ 解 1 2023/08/16 08:11
- FC2ブログ テキスト版からURLも表示できるように設定できないのでしょうか。 ブログにURLを載せようとしたら文 2 2023/02/12 11:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列と関数の練習問題
-
[C言語]fputsとfprintfの違い
-
メインプログラムに#include <a...
-
システムエンジニアの適正について
-
どちのほうがすきですか?
-
大量のデータを読み込んで表示...
-
C++のcase文の書き方
-
gccを行ってもexeファイルが生...
-
こんなことてしますか??
-
gcc13.2のバグ?
-
C言語について。
-
C言語初心者です、、、お助けく...
-
C言語 列挙型(enum型)変数について
-
c言語
-
VisualStudio2022でC言語プログ...
-
c言語でイベントフラグを使った...
-
C言語 1から20までの逆数の和を...
-
S-JIS → JIS コード変換するには
-
Notepad++の関数リスト表示の変...
-
double型が正常に認識されてい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
あなたは、Excelはどうやって学...
-
WindowsのCapsLock(キャップス...
-
質問失礼します。 プログラム言...
-
double型が正常に認識されてい...
-
Notepad++の関数リスト表示でC...
-
どちのほうがすきですか?
-
Stuck
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
C言語の関数と配列に関する質問
-
C言語って古いですか?
-
Linuxでの開発環境構築や設定の...
-
Bitcoin、BTCはブロックチェー...
-
C++6.0でのresource.hについて
-
MACで動く実行ファイルをWindow...
-
C言語 列挙型(enum型)変数について
-
c言語
-
大量のデータを読み込んで表示...
-
こんなことてしますか??
おすすめ情報