【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20682

C++かもしれませんが..
投稿者---りお(2005/04/20 06:47:57)


突然失礼します。
今下記処理を行いたいのですが
サンプルみたいなのがあったらお願いします。

CSVファイルを呼び出し、
その後の処理をmapですることをしたいのですが..
例であげると、

CSVのファイルデータに
000001,aaaaaa
000002,bbbbbb
000003,cccccc

というデータが格納されていて、
それをmain側で、000001だったらaaaaaaを出力させるような
処理をやりたいのですが、勉強不足のせいか
CSVのfopen後の処理がイメージがわきません

何かご存知でしたらみなさん教えてください



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:C++かもしれませんが.. 20683 Blue 2005/04/20 08:47:59
<子記事> Re:C++かもしれませんが.. 20688 Ban 2005/04/20 10:13:26


No.20683

Re:C++かもしれませんが..
投稿者---Blue(2005/04/20 08:47:59)


>CSVファイルを呼び出し、
>その後の処理をmapですることをしたいのですが..

CSVファイルからデータを構築するところは
  1. ファイルをオープン
  2. ファイルの1行のデータを読み込む
  3. 各値を取得(,の前と後ろのデータ)
  4. 3.で取得したデータをマップリストに追加(STLのstd::mapを使うと楽)
  5. 2.〜4.の処理をファイルの終わりまで繰り返す
  6. ファイルを閉じる
のような処理になると思います。 どこが具体的にわからないのかをまず見極めてみましょう。 # まぁいつもの通り投稿者に努力させるというアドバイスをしないで # 答えをはっつけてしまう方がいそうですが。。。



この投稿にコメントする

削除パスワード

No.20684

Re:C++かもしれませんが..
投稿者---りお(2005/04/20 09:19:02)


ありがとうございます。
今こんなのを作ってCSVからCSVに書き込む処理を作りました
void sample(){

FILE *fp1 , *fp2;
char line[1024];
char *token;
char seps[] = ",\"" ;
//ダブルコーテーションを残す場合は "," だけでよい

fp1 = fopen( "input.csv" , "r" );
fp2 = fopen( "output.csv" , "w" );

while(1)
{
if( fgets(line,1024,fp1) == NULL ) break;
if( feof(fp1) != 0 ) break;

token = strtok( line , seps );
while( token != NULL )
{
fprintf( fp2 , "%s" , token );
token = strtok( NULL , seps );

if(token != NULL) fprintf( fp2 , "," );
}
}
fclose(fp1);
fclose(fp2);

}

よくわかっていないところは、
マップリストに追加ってところと
その後のマップを見て出力させるところです

よかったら教えてください


この投稿にコメントする

削除パスワード

No.20687

Re:C++かもしれませんが..
投稿者---επιστημη(2005/04/20 09:52:18)


>マップリストに追加ってところと

C++なら

std::map<std::string,std::string> m;
m["00001"] = "aaaaa";
m["00002"] = "bbbbb";
… 以下同文

>その後のマップを見て出力させるところです

std::map<std::string,std::string>::const_iterator iter = m.begin();
while ( iter != m.end() ) {
  std::string key = iter->first;
  std::string value = iter->second;
  keyとvalueを出力
  ++iter;
}



この投稿にコメントする

削除パスワード

No.20689

Re:C++かもしれませんが..
投稿者---りお(2005/04/20 12:45:48)


情報ありがとうございます。
一点まだ理解できていないところがありますが、
fopenでCSVを呼び出した後に
CSVの値をマップリストに追加の際、

「m["00001"] = "aaaaa";
 m["00002"] = "bbbbb";」のように

明示的にやらないとできないのでしょうか??

さっきのソースを修正するとしたら


FILE *fp1;
char line[1024];
char *token;
char seps[] = ",\"" ;
//ダブルコーテーションを残す場合は "," だけでよい

fp1 = fopen( "input.csv" , "r" );

while(1)
{
if( fgets(line,1024,fp1) == NULL ) break;
if( feof(fp1) != 0 ) break;

token = strtok( line , seps );
while( token != NULL )
{
※ここにソースを追加するようになると
思いますが..(while文ではなくて)
}
fclose(fp1);
}

すいませんもう少し教えてください


この投稿にコメントする

削除パスワード

No.20691

Re:C++かもしれませんが..
投稿者---Blue(2005/04/20 13:01:27)


。。。
ホントにあなたが書いたソースですか?
そのwhile文で何をしているのかわかっていないようですが。

具体的には トークン分割処理で
1つ目のトークン(キー用の文字列)と2つ目のトークン(値用の文字列)を変数に登録しておく。
そのあとマップリストに追加する処理をすることになります。



この投稿にコメントする

削除パスワード

No.20693

Re:C++かもしれませんが..
投稿者---επιστημη(2005/04/20 13:11:54)


>「m["00001"] = "aaaaa";
> m["00002"] = "bbbbb";」のように
>
>明示的にやらないとできないのでしょうか??

…できないかどうか、やってみればわかります。



この投稿にコメントする

削除パスワード

No.20688

Re:C++かもしれませんが..
投稿者---Ban(2005/04/20 10:13:26)


>何かご存知でしたらみなさん教えてください

# fat さんと言う方がこちらで、まったく同じ課題に悩まれているようです。
http://c-chat.net/modules/newbb/viewtopic.php?topic_id=146&forum=2&noreadjump=1




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧