プロが教えるわが家の防犯対策術!

現在、独学でC言語を勉強しているのですが、
別のファイル(.dat)にあるデータの内容を
該当するデータだけ表示させたいのですが、
どうやったらできるのかわかりません。。
例えば、、、
別ファイルの内容が、
145556 1 C言語
256885 2 C言語その1
456789 3 C言語その2
    :
という風になっていたとして、
プログラム実行中に
145556 と入力したら
C言語 と表示されるような
行ごとに入力されたデータの最初の6桁を検索して
必要な部分だけを表示することはできるのでしょうか?
もし、できるのであれば
どのようにプログラムを作成すればいいのか教えてください!
そして、勝手なのですが、勉強中なので 
どうして そうなるのかも教えて欲しいのです。
よろしくお願いします。

A 回答 (2件)

勉強中ということであれば、多少は分かっている、ということですね?



こんな感じだけど。

#include <stdio.h>
#include <string.h>

int main(void)
{
FILE* in;
char buf[1024];
char key[256];

/* 検索キーの入力 */
printf("input key: "); gets(key);

/* データファイルを開けて */
in = fopen("h.data", "r");
while (fgets(buf, sizeof(buf), in) != NULL) { /* 一行ずつ読み込む */
/* 行の最初の6文字が一致すれば */
if (strncmp(buf, key, 6) == 0) {
/* 適当な処理を行う */
printf("%s\n", buf);
}
}
return 0;
}

# 教科書では、文字列、文字列操作、ファイル処理、あたりを分かっていれば OK
    • good
    • 0

知りたいのはファイルを読んで文字列化するところでしょうか?


文字列の先頭のみで内容を検索するところでしょうか?
文字列の後半を切り出し、変数に取り込むところでしょうか?

シンプルな手順としては
・ファイルをストリームで展開し一行ずつ読み文字列(char pointer)として取得
・文字列を半角SPで分割し、「行」と空白区切りの二次元配列に格納(char_moji[][]とする)
・配列の1次元目でLOOPし、char_moji[i][0]が検索目的の文字列と一致するか確認
・一致した要素がjであればchar_moji[j][2]が表示対象の文字列となる。

他にも
・ファイルを全部メモリに展開し、検索したい文字のポインタを取得。
・そのポインタから該当文字数分、ポインタをずらす。
・さらにそのポインタから改行コードまでが表示対象文字列となる。

アルゴリズムは以上のような感じであり、この他にもハッシュテーブルやリンクリストを使うなどいろいろな手法があると思います。
これらは動作する環境や、工程にかかる期間などからどのように作るか判断するのが普通です。

業務で急いでいるのであれば別ですが、Cの勉強が目的というのであれば、もう小さい機能に落とし込んでから作るのがいいです。
たとえば、ファイルを読むだけの機能、文字列を分割するだけの機能、配列から検索するだけの機能など。
そのほうが飲み込みやすいですし、質問で提示した機能も、これらの機能から拡張していくだけでできますから。

下記に勉強にいいサイトのURLを書きます。参考になれば幸いです。

参考URL:http://www.kumei.ne.jp/c_lang/
    • good
    • 0

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