C言語におけるCSVの読み込みがうまくいかない

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

C言語におけるCSVの読み込みがうまくいかない

#1

投稿記事 by ucchie1208 » 10年前

こんにちは

表題のとおりなのですが……

コード:

[code]
#include <stdio.h>

int main(void)
{
  FILE *fp;
  char *fname = "db1.csv";
  char hinban[100],name[100],category[100];
  int ret, price;
  float f1, f2;

  fp = fopen( fname, "r" );
  if( fp == NULL ){
    printf( "%sファイルが開けません\n", fname );
    return -1;
  }

  while( ( ret = fscanf( fp, "%[^,],%[^,],%d,%s", hinban, name, &price, category ) ) != EOF ){
    printf( "**********\n品番 : %s\n品名 : %s\n価格 : %d\n種類 : %s\n", hinban, name, price, category );
  }
  printf("\n");
  fclose( fp );
  return 0;
}

というコードを書いた実行ファイルに対して
--------------------------------------------------------------------
PC001,Laptop,70000,PC
PC002,Desktop,120000,PC
PC003,Workstation,300000,PC
AC001,Keyboard,2000,ACCESSORY
AC002,Mouse,1500,ACCESSORY
--------------------------------------------------------------------
というCSVを読み取らせたところ
--------------------------------------------------------------------
**********
品番 : PC001
品名 : Laptop
価格 : 70000
種類 : PC
**********
品番 :
PC002
品名 : Desktop
価格 : 120000
種類 : PC
**********
品番 :
PC003
品名 : Workstation
価格 : 300000
種類 : PC
**********
品番 :
AC001
品名 : Keyboard
価格 : 2000
種類 : ACCESSORY
**********
品番 :
AC002
品名 : Mouse
価格 : 1500
種類 : ACCESSORY
**********
品番 :

品名 : Mouse
価格 : 1500
種類 : ACCESSORY
--------------------------------------------------------------------

という出力となってしまいます.
最初の出力のように改行を挟まずに5個表示させたいのですが,どうもうまく行きません.
おそらく制御文字が悪さしているというところまではわかったのですが,対処法がわからないので,申し訳ないのですが,どなたかご教授お願いします.

環境はWindows・Mac両方試しました(それぞれの端末でcsvを作りなおしました)
コンパイラはgccでWindowsは4.8.1,Macは4.2.1です.

かずま

Re: C言語におけるCSVの読み込みがうまくいかない

#2

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

fscanf() の書式の先頭にスペースを置く。

コード:

  " %[^,],%[^,],%d,%s"
宿題: なぜこれで解決するのかを調べて報告してください。

ucchie1208

Re: C言語におけるCSVの読み込みがうまくいかない

#3

投稿記事 by ucchie1208 » 10年前

ありがとうございます.

これって改行の制御文字が残ってしまうからですかね?

閉鎖

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