2010-04-19 3 views
2

J'ai besoin d'analyser un fichier texte et de traiter les données. les données valides est généralement notée soit par un horodatage avec TS suivi de 10 numéros (TS1040501134) ou des valeurs avec un alpabet suivi de neuf chiffres (A098098098) ... donc ce sera comme TS1040501134A111111111B222222222...........TS1020304050A000000000........Ignorer les caractères d'un fichier lors de l'analyse

Cependant, il y a des cas où il y aura des 0 de remplissage quand il n'y a pas de données. Donc, un tel cas pourrait être

00000000000000000000TS1040501134A111111111B2222222220000000000TS1020304050A000000000........` 

Maintenant comme nous pouvons le voir, j'ai besoin d'ignorer ces zéros. comment pourrais-je faire cela? J'utilise gnu C.

Répondre

0

Ma première tentative à quelque chose de 'C' comme dans environ 20 ans ... Donc ce qui suit est, au mieux, du pseudo-code!

Lire dans une ligne de texte, puis ...

char timestamp[11]; timestamp[10] = '\0';  
char number[10]; number[9] = '\0';  

for (i = 0 ; i < strlen(text);) { 
    if isAlpha(text[i]) { 
    if text[i] == 'T' & text[i+1] == 'S' { 
     memcpy(timestamp, text[i+2], 10) 
     /* do whatever you do with a timestamp */ 
     i += 12 /* Skip over timestamp */ 
    } else { 
     memcpy(number, text[i+1], 9) 
     /* do whatever you do with a number */ 
     i += 10 /* Skip over number */ 
    } 
    } else { 
    if text[i] != '0' { 
     /* handle the error - should not get here */ 
    } 
    i++ /* move to next character */ 
    } 

Si les lignes ne doivent pas contenir des chaînes complètes (par exemple. Une ligne se termine par TS10405 et la ligne suivante commence par 01134), vous devra écrire du code supplémentaire pour gérer l'actualisation du tampon text correctement.

+0

N'utilisez jamais strlen(). – WhirlWind

+0

@WhirlWind. Et vous suggéreriez d'utiliser ... Critisim est la bienvenue, mais au moins soyez constructif (instructif) à ce sujet. – NealB

+0

strnlen(); utilisez toujours les variantes limitées en longueur des fonctions de chaîne. – WhirlWind

0

Vous devriez être capable de lire le fichier dans une chaîne, puis utilisez strnstr() pour localiser la sous-chaîne "TS". La chaîne strnstr() renvoie le début de votre horodatage.

Pour trouver l'horodatage suivant, démarrez strnstr sur le même tampon à un pointeur après la chaîne que vous venez de trouver. Si vous traitez plusieurs chaînes, vous devrez gérer la situation où un seul horodatage est réparti sur plusieurs chaînes.

Questions connexes