2016-11-17 57 views
0

我不是最好的C程序员,我试图解析包含单词和整数的文本文件,我试图将所有整数保存到不同的变量。我无法跳过所有其他字符,只得到整型的如何使用C解析文本文件并获取所有整数

我的文本文件看起来像这样:

Task[0] 0, 11, 27, 53, {2, 1, 1, 0, 0, 0, 0, 0, 0, 0}, 3 Task[1] 1, 22, 49, 92, {2, 1, 2, 0, 0, 0, 0, 0, 0, 0}, 3

int x = 0; 
int t; 
FILE *ptr_file; 
int lines = 0; 
int ch = 0; 
ptr_file = fopen("tasks.txt", "r"); 
if (!ptr_file) 
    return; 

int i, id, readyTime, WCET, deadline, numberOfResources; 
int resources[10]; 

while(!feof(ptr_file)) 
{ 
    ch = fgetc(ptr_file); 
    if(ch == '\n') 
    { 
    lines++; 
    } 
} 
while(x < lines) 
{ 
    //gets the whole task line 
    fscanf(ptr_file, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", &t, &id, &readyTime, &WCET, &deadline, &resources[0], &resources[1], &resources[2], &resources[3], &resources[4], &resources[5], &resources[6], &resources[7], &resources[8], &resources[9], &numberOfResources); 

    printf("Task %d, id %d, readytime %d, WCET %d, deadline %d, resources (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d) numResources %d\n", x, id, readyTime, WCET, deadline, resources[0], resources[1], resources[2], resources[3], resources[4], resources[5], resources[6], resources[7], resources[8], resources[9], numberOfResources); 
    ++x; 
} 
fclose(ptr_file); 

我不认为我使用的fscanf正确,但无法让它工作。

任何帮助将是巨大的

+0

也许一些'structs'会有用 – RoadRunner

回答

0

也许这可以帮助:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 

int main(void) 
{ 
    const char *input = "Task[0] 0, 11, 27, 53, {2, 1, 1, 0, 0, 0, 0, 0, 0, 0}, 3"; 
    const char *it = input; 
    char *next; 

    while(*it) 
    { 
     int value = strtol(it, &next, 10); 
     if(it == next) 
     { 
      printf("Text: '"); 
      while(*next && !isdigit(*next)) { 
       putchar(*next); 
       next++; 
      } 
      printf("'\n"); 
     } 
     else 
     { 
      printf("Value: %d\n", value); 
     } 
     it = next; 
    } 

    return 0; 
} 

输出:

Text: 'Task[' 
Value: 0 
Text: '] ' 
Value: 0 
Text: ', ' 
Value: 11 
Text: ', ' 
Value: 27 
Text: ', ' 
Value: 53 
Text: ', {' 
Value: 2 
Text: ', ' 
Value: 1 
Text: ', ' 
Value: 1 
Text: ', ' 
Value: 0 
Text: ', ' 
Value: 0 
Text: ', ' 
Value: 0 
Text: ', ' 
Value: 0 
Text: ', ' 
Value: 0 
Text: ', ' 
Value: 0 
Text: ', ' 
Value: 0 
Text: '}, ' 
Value: 3 

注意,它不会处理负整数,但是这很容易纠正。

相关问题