2014-11-02 3 views
-2

У меня есть программа, которая читает txt-файл. Затем я использую strtok для токенизации строк, используя «;» как разделитель. Проблема в том, что я должен горизонтально форматировать те жетоны, похожие на sql-запрос. Единственное, что я получаю, это сделать маркеры напечатаны вертикально. Я так растерялся.манипуляция с маркером strtok

Это мой код. #define _CRT_SECURE_NO_DEPRECATE #include #include

int i, j; 
FILE *fdin; 
char *p; 
char s_line[120]; 


char *token; 
const char s[2] = ";"; 
int main() 
{ 
    if ((fdin = fopen("raw14.txt", "r")) == NULL) 
     return 1; 

    while (fgets(s_line, sizeof(s_line), fdin)) 
    { 
     /*get first token */ 
     token = strtok(s_line, s); 

     p = &s_line[strlen(s_line) - 1]; 
     if (*p < ' ') 
      *p = '\0'; 
     /*Loop for Serarating*/ 
     while (token){ 

      printf("Description") 
      printf(" %s\n", token); 


      token = strtok(NULL, s); 
     } 

    } 

    printf("\n\n"); 

    return 0; 
} 

Результат должен выглядеть следующим образом:

ITEM ID ОПИСАНИЕ КОЛ-ВО QTY OUT БАЛАНС

240201 AEROSIL | 253.50 231.00 | 22.50

240202 АЛКОГОЛЬ | 663,00 412,78 | 250,22

TXT часть такова:

240201; Аэросил; 253,5; 231 240202; СПИРТ; 663; 412,78

Пожалуйста, обратите внимание, что я понятия не имею, как создать дополнительный столбец баланса и также поставили трубопроводы только с strtok. Я получаю, что я также должен использовать выравнивание по левому краю и форматировать printf, чтобы получить результат.

ответ

0

Я должен горизонтально форматировать эти маркеры

Так почему же вы печатаете символ новой строки ('\n') после каждого маркера?

Вместо

while (token) { 

     printf("Description") 
     printf(" %s\n", token); 

     token = strtok(NULL, s); 
    } 

вы могли бы сделать

while (token) { 

     printf("Description") 
     printf(" %s", token); 

     token = strtok(NULL, s); 
    } 
    printf("\n"); 
+0

Спасибо, похоже, это была моя незначительная проблема. Я редактировал вопрос. –

+0

@PetrosKoklas: Так что, пожалуйста, какая у вас проблема * major *? – alk

0

У вас есть \ п (символ новой строки) в вашем Printf, поэтому каждый маркер печатается на отдельной строке.

Изменить этот

while (token){ 
    printf("Description") 
    printf(" %s\n", token); 


    token = strtok(NULL, s); 
} 

к этому

while (token) { 
    printf(" %s", token); 
    token = strtok(NULL, s); 
} 
printf("\n"); // Put the newline character outside the loop. 

Вы должны также напечатать Описание ID БАЛАНС текст вне внешнего контура.

+0

Спасибо, похоже, это была моя незначительная проблема. Я редактировал вопрос. –

+0

Элементы разделены пробелом или символом новой строки? – user3121969

+0

Если они разделены пробелом, используйте символ пробела '' как разделитель на strtok(), а затем используйте sscanf() для анализа таких аргументов: sscanf (токен,% d;% s;% lf;% lf ", & itemID, description, & qty, &d); (int itemID, char description [40], double qty, double balance). – user3121969

0

Вы печатаете новую строку каждый раз, когда вы печатаете токен. Если вы хотите, чтобы они печатались как CHOCOLATE 1 4, просто используйте printf("%s ", token); в вашей петле. И вы также не должны печатать описание внутри своей петли.

+0

Спасибо, похоже, это была моя незначительная проблема. Я редактировал вопрос. –

Смежные вопросы