Игнорирование символов в файле при разборе - PullRequest
2 голосов
/ 19 апреля 2010

Мне нужно проанализировать текстовый файл и обработать данные. действительные данные обычно обозначаются либо меткой времени с TS, за которым следуют 10 цифр (TS1040501134), либо значениями с алфавитом, за которым следуют девять цифр (A098098098) ... так что это будет похоже на TS1040501134A111111111B222222222...........TS1020304050A000000000........

Однако бывают случаи, когда будет заполнитель 0, когда нет данных. Таким образом, такой случай может быть

00000000000000000000TS1040501134A111111111B2222222220000000000TS1020304050A000000000........`

Теперь, как мы видим, мне нужно игнорировать эти нули. как я могу это сделать? Я использую GNU C.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2010

Моя первая попытка чего-то типа "С", как в около 20 лет ... Так что, в лучшем случае, псевдокод!

Прочитайте в строке текста, затем ...

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 */
   } 

Если строки не должны содержать полные строки (например, одна строка заканчивается TS10405 и следующая строка начинается с 01134), вам придется написать дополнительный код для правильного обновления буфера text.

0 голосов
/ 19 апреля 2010

Вы должны быть в состоянии прочитать файл в строку, а затем использовать strnstr (), чтобы найти в нем подстроку "TS". Строка, возвращаемая функцией strnstr (), будет началом вашей отметки времени.

Чтобы найти следующую метку времени, запустите strnstr в том же буфере с указателем после строки, которую вы только что нашли. При работе с несколькими строками вам придется иметь дело с ситуацией, когда одна временная метка разбивается на несколько строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...