ファイルから、特定の文字列を検索し、その文字列に対応する文字列を取得したいのですが、どなたか方法を教えていただけないでしょうか?
処理:
test.txt中に以下の文字列が記載されています。
-----
TEST011:FILE00
TEST01:FILE01
TEST02:FILE02
XTEST01:FILE01
XTEST02:FILE02
-----
test.txtから、TEST01に対応する文字列FILE01を取得したいです。
当初、strchrを利用すれば良いかと考えていたのですが、
TEST011の行が先に抽出されてしまい、うまくいきません。
どなたか解決方法を教えていただけないでしょうか。
No.3ベストアンサー
- 回答日時:
strtok()で':'をトークンとして文字列を切り出し、検索文字列と比較すると良いのではないでしょうか。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp;
char line[256];
char* ptr;
if (argc < 2) return 0;
fp = fopen("test.txt","rt");
while (fgets(line, 255, fp)) {
ptr = strtok(line, ":");
if (strcmp(ptr, argv[1]) == 0) {
ptr = strtok(NULL, "\n");
printf("%s\n", ptr);
}
}
fclose(fp);
return 0;
}
> ./a.out TEST01
FILE01
>
No.4
- 回答日時:
>"TEST01:"は、順序が異なる場合、 "XTEST01:"を検索してしまうのではないでしょうか?
strchr() や strstr() は戻り値として、どこでマッチしたかを返すので問題ないと思いますけど
No.2
- 回答日時:
>test.txtから、TEST01に対応する文字列FILE01を取得したいです。
>当初、strchrを利用すれば良いかと考えていたのですが、
>TEST011の行が先に抽出されてしまい、うまくいきません。
検索キーが「TEST01」で
TEST011:FILE00 ←一致しない
TEST01:FILE01 ←一致する
TEST02:FILE02 ←一致しない
XTEST01:FILE01 ←一致しない
XTEST02:FILE02 ←一致しない
としたければ
「先頭から"TEST01"で始まっていて、直後に":"がある行」を検索すれば良いでしょう。
言い換えれば「先頭から"TEST01:"で始まっている行」です。
処理としては
1.検索文字の後ろに":"を付加する("TEST01"を"TEST01:"にする)
2.test.txtから読み込んだ1行の先頭から、検索文字に一致するか調べる
3.EOFになるまで2を繰り返す
となります。
#include <stdio.h>
#include <string.h>
int main(void)
{
char input_string[256];
char check_string[256];
char read_string[256];
char find_string[256];
FILE *fp;
int length;
fp = fopen("test.txt","rt");
gets(input_string);
strcpy(check_string,input_string);
strcat(check_string,":");
length = strlen(check_string);
for(;;){
if (foef(fp)) break;
fgets(read_string,256,fp);
if (!strncmp(read_string,check_string,length)) {
strcpy(find_string,read_string[length]);
printf("%s\n",find_string);
break;
}
}
fclose(fp);
return 0;
}
上記プログラムは「肝心な部分はこういう風に書けば良い」と言う例示なので、動作試験していません。また、エラーチェックもしていません。バッファオーバーフローも考慮していません。
実用にするなら「エラーをチェックする」「文字列の最大長を考慮する」「getsやstrcpyなど危険な関数は使わない」必要があるので、変更しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- その他(メールソフト・メールサービス) このメールは何ですか 8 2023/06/15 17:31
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
ファイルから読みこむ方法
C言語・C++・C#
-
C言語で特定の行を抽出する方法を教えてください。
C言語・C++・C#
-
ファイルの中身検索と表示
C言語・C++・C#
-
-
4
テキストファイル内に対して, 特定の単語を探すプログラム c言語
C言語・C++・C#
-
5
ファイル出力の場所を指定
C言語・C++・C#
-
6
C言語で複数列のデータを1列のみ読み込みたい
C言語・C++・C#
-
7
C言語で特定列だけを抽出して配列に格納し、出力したいです。 読み込みファイル(read.txt) 0
C言語・C++・C#
-
8
C言語 ファイルの指定された行を表示
C言語・C++・C#
-
9
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
10
CSVファイルの特定行の削除
Visual Basic(VBA)
-
11
char str[256]の256の意味は?
C言語・C++・C#
-
12
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
13
C言語 配列の長さの上限
C言語・C++・C#
-
14
csvファイルの特定のセルから読み込み
C言語・C++・C#
-
15
1行ずつではなくまとめてファイル出力したいのですが
C言語・C++・C#
-
16
fopenでディレクトリ内の全ファイルを順次開く方法
C言語・C++・C#
-
17
csvファイルを開かずに文字を検索し行を抽出したい
Visual Basic(VBA)
-
18
C#についてText Boxの枠
その他(ソフトウェア)
-
19
入力された文字列から整数だけを取り出す方法
C言語・C++・C#
-
20
C言語で構造体のメンバを簡単に出力する方法ありますか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
「指定されたキャストは有効で...
-
SQLインジェクション
-
C# 他のアプリケーションから複...
-
C#のStreamReaderでのforeach
-
ジャバスクリプトについて。
-
ボタンの複数割り当てについて
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
ダブルクォーテーションのrepla...
-
1~100までの数字を表示し、か...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
ArrayListの要素数の上限
-
javaで質問です。 文字列2023/2...
-
配列にnullを代入すると、null...
-
Javaで改行などが出来ないのです。
-
System.out.printlnの出力先
-
ORA-01858: 数値を指定する箇所...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字列が一致する行から...
-
C# ListBoxのアイテムをユーザ...
-
Delphiで改行文字の置換がうま...
-
マルチスレッドで同時にFTPアッ...
-
C#でIPアドレスの取得について
-
【Java8以降】csvファイルの複...
-
strcmp関数などでの複数の文字...
-
strtokでの空文字への置き換え
-
「指定されたキャストは有効で...
-
C#での関数テーブルの作り方
-
string→CStringの型変換について
-
PHPのSHA256変換について
-
C# JSONについて
-
C# visual studio 2017 TCP/IP...
-
GridViewで複数のDropDownList...
-
GDI+ DrawString() で指定範囲...
-
java HashMapで数値データを取...
-
C#で型変換
-
std::stringの継承
-
jap実行時のTomcatのエラーに困...
おすすめ情報