CSVファイルから検索したい 

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
meteor

CSVファイルから検索したい 

#1

投稿記事 by meteor » 5年前

コード:

#pragma warning( disable: 4996 )
#include <stdio.h>
#include <string.h>
#include <fstream>

using namespace std;

typedef struct tagKOTOWAZA{
char japanese[50];
char english[50];
}KOTOWAZA;

int main()
{
char buf[256];
KOTOWAZA c[200];
int i, count;


/*ifstream strtok strcpy を使ってファイルを読み込む*/
//=====ここから=====
ifstream fin("Book1.csv");
if(fin.is_open()){
//ファイル内容の表示とクローズ

for(count=0;fin.getline(buf, sizeof(buf)), !fin.eof();count++){//読み込める間
//printf("%s",buf);デバッグ用
char *p;
p = strtok(buf,",");
if(p)strcpy(c[count].japanese,p);
p = strtok(NULL,",");
if(p)strcpy(c[count].english,p);
}
fin.close();
}else{
printf("ファイルのオープンに失敗しました。\n");
return 1;
}
//=====ここまで====

return 0;
}
[code/]
何度もすみません。Windowsコンソールアプリケーションで空のプロジェクトに、このソースを入れてデバッグ無しで実行しても、何か入力してください...のコンソールが出てくるだけで入力すると何も帰ってこずにコンソールが消えます。
何がいけないのかが全く分かりません・・・

初級者
記事: 200
登録日時: 9年前

Re: CSVファイルから検索したい 

#2

投稿記事 by 初級者 » 5年前

何も出力している気配がないので、
当然であるような気がします。

タイトルに書いてある
検索
のコードは、どこにありますか?

meteor

Re: CSVファイルから検索したい 

#3

投稿記事 by meteor » 5年前

あぁ・・・言われてみれば確かに・・・。
どこに何を書けばばよかったのでしょう・・・。

初級者
記事: 200
登録日時: 9年前

Re: CSVファイルから検索したい 

#4

投稿記事 by 初級者 » 5年前

meteor さんが書きました: どこに何を書けばばよかったのでしょう・・・。
って言われましても、
CSVファイルの中身がわからない
何をどのように検索したいのかわからない
結果をどのように出力したいのかわからない
という「無い無い尽くし」の状態ですので、
だれにもわかりません。

meteor

Re: CSVファイルから検索したい 

#5

投稿記事 by meteor » 5年前

つたない文章で申し訳ありません・・・。
CSVの中は

三つ子の魂百まで,As the boy, so the man.

このような文章があり、
このファイル中から単純に文字の完全一致で答えを返すようなプログラムが書きたいです。
三つ子の魂百まで を入力したら
As the boy, so the man.
とかえってくる
コンソール上で表示したいです。

これだけではだめでしょうか・・・
貴重な時間を割いていただいているのに申し訳ないです。

かずま

Re: CSVファイルから検索したい 

#6

投稿記事 by かずま » 5年前

参考となるプログラムを提示しますので、よく読んで、
理解できなかったらよく調べて、理解したら説明してください。
それでも分からなかったら、どこが分からないのか質問してください。
解決ボタンを押すだけで逃げてはいけません。
このプログラムが気に入らないなら、
自分で別のプログラムを書いていただいてももかまいません。

コード:

#include <iostream>
#include <fstream>
#include <string>
#include <map>

int main()
{
    using namespace std;

    ifstream fin("Book1.csv");
    if (!fin) return 1;

    map<string, string> data;
    string line;
    while (getline(fin, line)) {
        size_t n = line.find(',');
        if (n == line.npos) continue;
        data[line.substr(0, n)] = line.substr(n+1);
    }
    while (cout << ">> ", getline(cin, line))
        if (data.find(line) != data.end()) cout << data[line] << endl;
}

meteor

Re: CSVファイルから検索したい 

#7

投稿記事 by meteor » 5年前

すみません、唐突ですがコンソール上に結果を表示させるのにはprintf 関数は必要ないんでしょうか?

アバター
みけCAT
記事: 6281
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: CSVファイルから検索したい 

#8

投稿記事 by みけCAT » 5年前

meteor さんが書きました:すみません、唐突ですがコンソール上に結果を表示させるのにはprintf 関数は必要ないんでしょうか?
はい。printf関数を使用しなくても、puts関数(やputchar関数)などで結果が表示できます。
fprintf関数を使用するのもいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: CSVファイルから検索したい 

#9

投稿記事 by かずま » 5年前

元のプログラムが ifstream を使っているので
C++ であると判断しましたが、
出力関数を printf しか 知らないということは
C もあまり得意ではないということでしょうか?

では、次のプログラムは理解できますか?

コード:

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

typedef struct {
    char japanese[50];
    char english[50];
} Kotowaza;

int main(void)
{
    static Kotowaza kotowaza[1000];
    int i, n = 0;
    char buf[256];
    FILE *fp = fopen("Book1.csv", "r");
    if (!fp) return 1; 

    while (n < 1000 && fgets(buf, sizeof buf, fp))
        if (sscanf(buf, "%49[^,],%49[^\n]",
            kotowaza[n].japanese, kotowaza[n].english) == 2) n++;
    fclose(fp);

    while (printf(">> "), fgets(buf, sizeof buf, stdin)) {
        char *p = strchr(buf, '\n');  // 改行文字を見つけて
        if (p) *p = 0;                // それを削除
        for (i = 0; i < n; i++)
            if (strcmp(kotowaza[i].japanese, buf) == 0) break;
        if (i < n) puts(kotowaza[i].english);
    }       
    return 0;
}
わからないところは質問してください。
ちょっとクセのある書き方なので、
理解したら自分の書き方に直してみてください。

meteor

Re: CSVファイルから検索したい 

#10

投稿記事 by meteor » 5年前

すいません調べたんですが、どうしても教えてもらいたい箇所がちらほらと・・・
while(n<1000 && fgets(buf,sizeof buf,fp))

この条件に対する繰り返し行う内容は何にあたるのかがわかりません。

アバター
みけCAT
記事: 6281
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: CSVファイルから検索したい 

#11

投稿記事 by みけCAT » 5年前

meteor さんが書きました:すいません調べたんですが、どうしても教えてもらいたい箇所がちらほらと・・・
while(n<1000 && fgets(buf,sizeof buf,fp))

この条件に対する繰り返し行う内容は何にあたるのかがわかりません。
その直後の

コード:

        if (sscanf(buf, "%49[^,],%49[^\n]",
            kotowaza[n].japanese, kotowaza[n].english) == 2) n++;
を繰り返すはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

meteor

Re: CSVファイルから検索したい 

#12

投稿記事 by meteor » 5年前

あぁ!!ありがとうございます!
無事プログラムの動作の確認がとれました・・・。
回答して頂いたみなさん、本当に感謝しています。
時間のない中協力していただきありがとうございました。

meteor

Re: CSVファイルから検索したい 

#13

投稿記事 by meteor » 5年前

すみません、解決フラグつけるのを忘れていました。

閉鎖

“C言語何でも質問掲示板” へ戻る