現在、独学で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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- C言語・C++・C# linux C言語について ./ファイル名 入力値 入力値が表示 という風に実行と入力を同時にしたい 3 2022/10/17 16:57
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
strcat関数を自作したいです
-
const char* s1とただのchar s1...
-
C言語にて構造体のメンバがNULL...
-
DWORDとcharの変換
-
csvファイルをfscanfで読み込む...
-
c言語でポインタ変数を用いた配...
-
C言語 strstrの実装
-
char 文字列型 の表現範囲が-12...
-
wsprintf( ポインタ , "%d" , "...
-
C言語の文字リテラル中の16進文...
-
コマンドライン引数 *argv[]は...
-
C言語のintとcharの違いってな...
-
new charとnew char[N]の違いは?
-
char*を初期化したいのですが
-
char AA[]{"全角文字"};から"全...
-
[C] 構造体メンバーのカンマ区...
-
C言語のプログラムについてです
-
動的メモリの初期化方法について。
-
警告 : 問題のあるポインタの変換
-
C言語 動的なメモリの確保 実...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
CStringからchar*への型変換に...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
C言語のプログラムについてです
-
strcat関数を自作したいです
-
fstream型オブジェクトを関数の...
-
new charとnew char[N]の違いは?
-
DWORDとcharの変換
-
文字列の途中から途中までを抽出
-
char 文字列型 の表現範囲が-12...
-
const char* s1とただのchar s1...
-
wsprintf( ポインタ , "%d" , "...
-
c言語でポインタ変数を用いた配...
-
char型にint型の数値を代入する。
-
C言語で文字列をかえす正しい書...
-
C++17で、unsigned char * 配列...
-
共用体について
-
エクセルのMID関数は、C言語では?
おすすめ情報