Чтение отформатированных данных в C - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть набор данных с определенным форматом, который я хочу прочитать на C, а также распечатать в определенном формате.Вот формат моих данных в текстовом файле:

sample[0][0]=1; sample[0][1]=3;
sample[1][0]=2; sample[1][1]=4;
sample[2][0]=3; sample[2][1]=5;

, и я хочу прочитать это и вернуть

  (*inputs)[0][0] = 1;   (*outputs)[0]=3;
  (*inputs)[1][0] = 2;   (*outputs)[1]=4;
  (*inputs)[2][0] = 3;   (*outputs)[2]=5;

Я смог написать код, который будет читать мой файл впросто следующий формат:

1 3
2 4
3 5

и вот мой код:

int main() {
FILE *samples;
samples = fopen ("peaks.txt","r");

int arr[10][2];
int i;
int j;
for (i=0; i<10; i++) {
    for (j=0; j<2; j++) {
        fscanf(samples, "%d, ", &arr[i][j]);
        printf("int = %d\t",  arr[i][j]);
    }
    printf("\n");
}

}

Как мне изменить этот код, чтобы прочитать формат выше?Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете прочитать, например, для первой строки данных,

fscanf(filein, "sample[0][0]=%d; sample[0][1]=%d;", &arr[0][0], &arr[0][1]);

но он очень хрупкий, потому что если входной файл не совсем такой, вы получите непредсказуемое поведение

Вы можете распечатать с

printf("(*inputs)[0][0] = %d;   (*outputs)[0]=%d;", arr[0][0], arr[0][1]);

но, вероятно, я неправильно понял оператор print, поскольку не знаю точно, что вы хотите, чтобы ваш код делал.

Теперь для большого количества данных .....

новая версия ... намного проще ... D'oh!

int a,b;

for (i=0; i<10; i++) {
    for (j=0; j<2; j++) {
        fscanf(samples, "sample[%d][%d]=\%d;", &a, &b, &arr[i][j]);
        printf("int = %d\t",  arr[i][j]);
    }
    printf("\n");
}

так что теперь вы читаете в числовых значениях из образца как a и b - но затем не используете эти значения a и b - хотя, чтобы написать хорошую программу, вы можете проверить значения a и b равны i и j, как вы ожидаете.

старая не рабочая версия ниже

char* string_input[100]; // we need this to get the right format for scanf...

for (i=0; i<10; i++) {
    for (j=0; j<2; j++) {
        sprintf(string_input, "sample[%d][%d]=\%d;", i, j)
        fscanf(samples, string_input, &arr[i][j]);
        printf("int = %d\t",  arr[i][j]);
    }
    printf("\n");
}

что делает строку Тейлора пригодной для чтения в ваших данных построчно ...

, например, если i=8 и j=1, то string_input будет sample[8][1]=%d;

...