私はこのフォーマットに類似したファイルからの入力と引数を読み取るようになってる:フォーマット済みのデータをファイルから読み取る方法は?
Add id:324 name:"john" name2:"doe" num1:2009 num2:5 num2:20
問題は、私はfgetsのを使用することはできませんよです。私はfscanfで試しましたが、 ":"を無視して文字列 'name: "john"を分ける方法は知られていません。
私はこのフォーマットに類似したファイルからの入力と引数を読み取るようになってる:フォーマット済みのデータをファイルから読み取る方法は?
Add id:324 name:"john" name2:"doe" num1:2009 num2:5 num2:20
問題は、私はfgetsのを使用することはできませんよです。私はfscanfで試しましたが、 ":"を無視して文字列 'name: "john"を分ける方法は知られていません。
になる場合あなたのための仕事の私はsscanf()
の代わりに、ファイルを作成せずに説明しています。あなたのファイルにfscanf()
を使用するように電話を変更することができます。
#define MAXSIZE 32
const char *line = "Add id:324 name:\"john\" name2:\"doe\" num1:2009 num2:5 num3:20";
char op[MAXSIZE], name[MAXSIZE], name2[MAXSIZE];
int id, num1, num2, num3;
int count =
sscanf(line,
"%s "
"id:%d "
"name:\"%[^\"]\" " /* use "name:%s" if you want the quotes */
"name2:\"%[^\"]\" "
"num1:%d "
"num2:%d "
"num3:%d ", /* typo? */
op, &id, name, name2, &num1, &num2, &num3);
if (count == 7)
printf("%s %d %s %s %d %d %d\n", op, id, name, name2, num1, num2, num3);
else
printf("error scanning line\n");
出力:
324ジョンのDOE 2009年5 20
を追加しますそうでなければ、私は手動で一度に文字を読み込む入力を解析したり、あるいは場合、バッファでそれを投げるだろう何らかの理由でfgets()
を使用することはできませんでした。 IMHOよりもバッファリングするほうがずっと簡単です。次に、strtok()
などの他の関数を使用して、解析することができます。
これはおそらくあなたが望むものですか?
#include <stdio.h>
#include <string.h>
int main()
{
char str[200];
FILE *fp;
fp = fopen("test.txt", "r");
while(fscanf(fp, "%s", str) == 1)
{
char* where = strchr(str, ':');
if(where != NULL)
{
printf(" ':' found at postion %d in string %s\n", where-str+1, str);
}else
{
printf("COMMAND : %s\n", str);
}
}
fclose(fp);
return 0;
}
入力ファイルが整形、非常に具体的な形式になります確かに知っている場合、それの出力はfscanf()
は常にオプションであり、多くのことを行います、
COMMAND : Add
':' found at postion 3 in string id:324
':' found at postion 5 in string name:"john"
':' found at postion 6 in string name2:"doe"
':' found at postion 5 in string num1:2009
':' found at postion 5 in string num2:5
':' found at postion 5 in string num2:20
いいえ、John、Doe、2009などを抽出し、ユニークなIDを持つリンクリストに格納しようとしています。残りのプログラムには何の問題もありません。正しい文字列と整数をファイルから抽出する方法を理解できません。 scanfの代わりに何か他のものを使うべきですか? – marr
なぜあなたはfgetsを使用できませんか?宿題ですか? – JeremyP