2010-05-19 12 views
0

J'ai un code d'analyse (myprog) qui aspire les données en utilisant les éléments suivants:Comment puis-je créer une chaîne de format fscanf accepter l'espace blanc et la virgule (,) tokenization

if(5 == fscanf(in, "%s%lf%f%f%f", tag, & sec, & tgt, & s1, & s2)) 

qui fonctionne très bien . Mais dans la situation où j'ai des fichiers de données qui sont séparés par des virgules, je fais actuellement quelque chose comme:

sed 's/,/ /g' data | myprog 

Puis-je modifier la chaîne de format dans la fonction fscanf() d'accepter les deux formats de délimitation?

Répondre

1
fscanf(in, "%[^, ]%*[, ]%lf%*[, ]%f%*[, ]%f%*[, ]%f", tag, &sec, &tgt, &s1, &s2) 

Devrait-il fonctionner?

+0

Oui, je l'ai mal lu au début ... vérifiez la nouvelle version :) – harald

+0

Fixez la première regex ('% [^,]' devrait être '% [^,]') et je vous voterai. Je ne connaissais pas le spécificateur '*' avant, merci. – Jamie

+0

Vous avez raison, devrait être réparé maintenant. – harald

0

Et à ce sujet:

char tmp; fscanf (in, "% s% c% lf% c% f% c% f% c% f", tag, & tmp, & sec, & tmp, & tgt, & tmp, & s1, & tmp, & s2)

Si vous ne vous souciez pas du caractère unique qui délimite vos valeurs, il vous suffit de le lire et de le stocker dans une variable à jeter.

+0

Et s'il n'y a pas d'espaces? – Jamie

+0

Je suppose seulement qu'il y a un délimiteur de caractères de la question originale - l'expérimentation est la mère de la découverte. – LoudNPossiblyWrong