2013-09-16 6 views
0

Как прочитать файл в C, когда данный входной формат являетсяпрочитать файл для конкретного формата входного

4 
5 
3 
a,b 
b,c 
c,a 

Пожалуйста, помогите ... это моя функция сканирования файлов. здесь m должно хранить 4, n должно хранить 5 и l следует хранить 3. тогда col1 будет хранить {abc} и col2will store {bca} m n, l int. col1 и col2 - массивы символов Третья строка файла указывает значение 3, которое означает, что под ним есть три строки и содержит 3 пары символов.

i = 0, j = 0; 
while (!feof(file)) 
{ 
    if(j==0) 
    { 
    fscanf(file,"%s\t",&m); 
    j++; 
    } 
    else if(j==1) 
    { 
    fscanf(file,"%s\t",&n); 
    j++; 
    } 
    else if(j==2) 
    { 
    fscanf(file,"%s\t",&l); 
    j++; 
    } 
    else 
    { 
    /* loop through and store the numbers into the array */ 
    fscanf(file, "%s%s", &col1[i],&col2[i]); 
    i++; 
    } 
} 

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

+0

Всегда ли файл длиной 6 строк? – Floris

+0

нет третьей строки имеет значение 3, что указывает на то, что под ней есть три строки и содержит пары символов. –

+0

Вы идете об этом неправильно. Удалите цикл while. Затем напишите код для обработки первой строки. Используйте только цикл while для строк, которые обрабатываются одинаково (с использованием 'col1') – dcaswell

ответ

2

ОБНОВЛЕН разрешить чтение переменного числа строк

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

int main(void) { 
    int value1, value2, value3, i; 
    char *col1, *col2; 
    char lineBuf[100]; 
    FILE* file; 

    file = fopen("scanme.txt","r"); 

    fgets(lineBuf, 100, file); 
    sscanf(lineBuf, "%d", &value1); 
    fgets(lineBuf, 100, file); 
    sscanf(lineBuf, "%d", &value2); 
    fgets(lineBuf, 100, file); 
    sscanf(lineBuf, "%d", &value3); 

    // create space for the character columns - add one for terminating '\0' 
    col1 = calloc(value3 + 1, 1); 
    col2 = calloc(value3 + 1, 1); 

    for(i = 0; i < value3; i++) { 
    fgets(lineBuf, 100, file); 
    sscanf(lineBuf, "%c,%c", &col1[i], &col2[i]); 
    } 
    fclose(file); 

    printf("first three values: %d, %d, %d\n", value1, value2, value3); 
    printf("columns:\n"); 
    for (i = 0; i < value3; i++) { 
    printf("%c %c\n", col1[i], col2[i]); 
    } 

    // another way of printing the columns: 
    printf("col1: %s\ncol2: %s\n", col1, col2); 
} 

Я исполненной ни один из обычной проверки ошибок и т.д. - это просто, чтобы продемонстрировать, как читать вещи в этом произвело ожидаемый результат. с тестовым файлом, который у вас был. Надеюсь, вы сможете взять это отсюда.

+0

здесь вместо 3 в цикле for. если я использую значение3. Ваш код работает неправильно. Моя точка - это третья строка, которая скажет мне, сколько пар символов будет там после нее. 3-я строка - 3, ни одна из пар символов не будет 3. –

+0

Пожалуйста, объясните, что вы говорите. Это работает именно для файла, который вы дали (3 числа, за которыми следуют 3 строки); если вы ожидаете, что количество строк будет переменной, вам нужно объяснить это в своем вопросе. – Floris

+0

Я понимаю сейчас. Я изменю код соответствующим образом. Дайте мне одну минуту. – Floris

2

Несколько указателей:

  1. Не используйте feof(), он никогда не требуется для такого кода.
  2. Прочитайте полную строку сразу, с fgets().
  3. Затем проанализируйте линию, используя, например, sscanf().
  4. Проверьте значения возврата от функций ввода-вывода, они могут выйти из строя (например, в конце файла).
Смежные вопросы