
現在、独学でC言語を勉強しているのですが、
別のファイル(.dat)にあるデータの内容を
該当するデータだけ表示させたいのですが、
どうやったらできるのかわかりません。。
例えば、、、
別ファイルの内容が、
145556 1 C言語
256885 2 C言語その1
456789 3 C言語その2
:
という風になっていたとして、
プログラム実行中に
145556 と入力したら
C言語 と表示されるような
行ごとに入力されたデータの最初の6桁を検索して
必要な部分だけを表示することはできるのでしょうか?
もし、できるのであれば
どのようにプログラムを作成すればいいのか教えてください!
そして、勝手なのですが、勉強中なので
どうして そうなるのかも教えて欲しいのです。
よろしくお願いします。
No.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
No.1
- 回答日時:
知りたいのはファイルを読んで文字列化するところでしょうか?
文字列の先頭のみで内容を検索するところでしょうか?
文字列の後半を切り出し、変数に取り込むところでしょうか?
シンプルな手順としては
・ファイルをストリームで展開し一行ずつ読み文字列(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/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringからchar*への型変換に...
-
isalpha()関数について
-
文字列strの中から文字cを探す...
-
C言語でポインターで詰まってい...
-
警告
-
VBからCで作成されたDLL...
-
char*を初期化したいのですが
-
構造体のメンバーの静的なサイ...
-
メモリを0クリアする方法について
-
new charとnew char[N]の違いは?
-
構造体・ビットフィールドのvol...
-
動的メモリの初期化方法について。
-
Excelですべての組合せ(重複組...
-
C言語において、 配列要素をひ...
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C言語の配列のサイズ
-
Integer変数をカラにしたいので...
-
Run-Time Check Failure #3とい...
-
リッチテキストボックスの中身...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringからchar*への型変換に...
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
fstream型オブジェクトを関数の...
-
char型にint型の数値を代入する。
-
char 文字列型 の表現範囲が-12...
-
文字列を比較するプログラムな...
-
ostringstreamではまりました
-
文字列内の数字削除
-
C言語のプログラムについてです
-
csvファイルをfscanfで読み込む...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
C言語でポインターで詰まってい...
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列str内の全ての数字を...
-
以下のようなプログラムを書い...
-
char AA[]{"全角文字"};から"全...
おすすめ情報