
C++言語についての質問です。
C++を利用して下記の処理を考えています。
下記のようなテキストファイルから、「名前」で始まる行だけを
抽出して、別のテキストファイへ書き込みを行います。
また、その際に”「名前」の表記”+”スペース文字”は削除します。
-----------------
住所 東京都
名前 AAAAA
年齢 15才
-----------------
住所 神奈川県
名前 BBBBB
年齢 20才
-----------------
<略>
実行後に出力されるテキストファイルには、
AAAAA
BBBBB
と記載されるように処理を行いたいです。
初心者のため、実現可能かも分かっていません・・。
お手数ですが、アドバイスをお願いします。
具体的な方法についても記載して頂けると助かります。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
No4です(改修←早っ、おちつけ年寄り)。
>また、その際に”「名前」の表記”+”スペース文字”は削除します。
スペース文字として、「半角または全角の1つ」としました。
while( NULL != fgets( cBuf, 255, fp1 ) ){
if( strstr( cBuf, "名前 " ) ) fprintf( fp2, "%s", &cBuf[5] );
if( strstr( cBuf, "名前 " ) ) fprintf( fp2, "%s", &cBuf[6] );
}
こんなのじゃあ質問しないか簡単すぎて・・・。C++に書き換えろ、ということかなぁ(ご質問主旨に沿っていないのではと不安)。
No1回答者さんがいわれるように「がんばって」なくて申し訳ない。
No.4
- 回答日時:
>まずは処理別にコーディングしてみたいと思います。
★もっと簡単に考えたらいいのに・・・。
while( NULL != fgets( cBuf, 255, fp1 ) ){
if( NULL == strstr( cBuf, "名前 " ) ) continue;
fprintf( fp2, "%s", &cBuf[5] );
}
(注:タブの代わりに全角空白使用)
>AAAAが記載されない状態です。
それは、質問者様のデータ部分をそのまま使ったから。
(質問本文中の"名前 AAAAA"の空白は、【全角】です)
あっ、【全角】の場合も「処理」せよ、ということですか?。
それでしたら、私のソースは、対応しません。
上の私のソースの「可動条件」は、抽出レコードの
"名前 AAAAA"の空白は、【半角】で、かつ、◆1つであること。
レコード長は255以内であること。
です。
No.3
- 回答日時:
#include <stdio.h>
int main(void)
{
FILE *fp1 = fopen("test000.txt", "r"),
*fp2 = fopen("test001.txt", "w");
char str[32];
int i = 0;
if(!fp1 || !fp2) return 1;
while(1){
if(i % 4 == 2){
fscanf(fp1, "%*[^ ]%*[ ]%s%*c", str);
fprintf(fp2, "%s\n", str);
}
else{
if(fscanf(fp1, "%*[^\n]%*c") == EOF) break;
}
i ++;
}
fclose(fp1);
fclose(fp2);
return 0;
}
No.2
- 回答日時:
#include <stdio.h>
int main(void)
{
FILE *fp1 = fopen("file1.txt", "r"),
*fp2 = fopen("filw2.txt", "w");
char str[32];
int i = 0;
if(!fp1 || !fp2) return 1;
while(1){
if(i % 4 == 2){
fscanf(fp1, "%*[^ ]%*c%s%*c", str);
fprintf(fp2, "%s\n", str);
}
else{
if(fscanf(fp1, "%*[^\n]%*c") == EOF) break;
}
i ++;
}
fclose(fp1);
fclose(fp2);
return 0;
}
具体的なプログラムまで記載して頂き、ありがとう御座いました。
このプログラムを例にあげたテキストファイルに対して実行すると、
BBBBB
と出力ファイルに記載されます。
AAAAが記載されない状態です。
(最初に出現する抽出対象行が記載されない)
原因がお分かりになれば教えて頂けますでしょうか。
よろしくお願いします。
No.1
- 回答日時:
実現可能かどうかと言えば、もちろん可能です。
考え方としては…
入力ファイルをファイルA、出力ファイルをファイルBとした場合、
ファイルAから1行ずつ文字列を取得(※1)します。
取得した文字列が"名前"かどうかを判断(※2)し、
名前であればスペース以降を文字列から抽出(※3)し、
ファイルBに出力(※4)すれば良い訳です。
一気にコーディングしてしまおうとせずに、
まずは※をつけた箇所の処理をどう実現するか?を考えてみて下さい。
これらが実現出来れば、後は実現したものを組み合わせるだけで
完成するのではないでしょうか?
がんばってください。
ご回答ありがとう御座いました。
記載して頂いた”考え方”がとても参考になりました。
まずは処理別にコーディングしてみたいと思います。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) Excelで教えてください。 入力順に日付と名前が記載されてる一覧表で、同じ日付けの1番下の行(その 4 2023/08/03 09:14
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
fscanfでループしてしまう。
-
C言語にてXMLファイルから任意...
-
テキストファイル内に対して, ...
-
datファイルの読み込み
-
ファイルに行番号を追加
-
大量の入力ファイルを扱うとき...
-
辞書順にソートしたいのですが...
-
InternetReadFileを使ったファ...
-
C言語 連番データの読み込み
-
C言語におけるファイル読み込み...
-
数値のみ抽出(C言語)
-
簡易grep関数ができません。助...
-
VisualStudioでのファイルの入...
-
fgets( ) の返り値は何?
おすすめ情報