あるフィールドをタブで区切ったファイルがあります。常に17個のタブがありますが、順序があり、このような..Cで連続したタブを認識するための文字列を分割する
75104\tDallas\t85\t34.46\t45.64
75205\tHouston\t\t37.34\t87.32
93434\t\t\t1.23\t3.32
私は、次のファッション
while (fgets(buf, sizeof(buf), fp) != NULL) {
tok = strtok(buf,"\t");
while(tok != NULL) {
printf("%s->",tok);
tok = strtok(NULL,"\t");
}
}
でstrtok
を使用する場合、私はすべてのトークンを取得するよう、様々であるが、二重のタブ\t\t
以上のことができます無視されます。しかし、フィールドが空の場合は、フィールドが空の場合はプレースホルダを使用して構造が17個のタブに依存するため、フィールドが空のときには、strtok
は複数のタブを無視できません。
私は
if(tok == NULL || '')
での問題に対処しようとしましたが、私はstrtok
タブの後にタブを認識しないと思います。この問題に対処する最善の方法は何ですか?
それを見てください - あなたの 'if(tok == NULL || '')'試みはあなたが別の言語に慣れているように見えます。それは技術的には有効ですが、あなたがしたいことはほとんどありません。 – usr2564301
strtok()は使用できません。ステートマシンを構築したり、strspn()/ strcspn()を使用する。 – joop