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

Я действительно новичок в программировании на C, и это часть задания. Я пытаюсь прочитать текстовый файл, разделенный запятыми, в формате:

 [value1], [value2]

в C и пытается передать их как строку и параметр int в функцию. Я пробовал использовать sscanf() и даже манипулировать с fgetc() без особой помощи. Пробел после запятой оказался проблемой.

Пример:

 2001, 102
 1314, 78
 0410, 910
 ...

Пожалуйста, помогите мне.

Спасибо.


person Souradeep Sinha    schedule 18.10.2014    source источник
comment
Напишите, что вы пробовали.   -  person ani627    schedule 18.10.2014
comment
Возможный дубликат - см. это: stackoverflow.com/q/12911299/1726419   -  person yossico    schedule 18.10.2014
comment
На самом деле, вы не можете. Формат csv может содержать запятые в кавычках в полях данных, и его непросто программировать новичку. Если вы не хотите решать только самый простой случай, вы можете использовать хорошую библиотеку и примеры в ней: sourceforge.net /проекты/libcsv   -  person rubber boots    schedule 18.10.2014
comment
Мне жаль. Я был на нем прошлой ночью и не сохранил коды, которые не дали мне надлежащего вывода.   -  person Souradeep Sinha    schedule 18.10.2014
comment
@SouradeepSinha, почему бы тебе не попробовать еще раз, прежде чем спрашивать здесь? Если это задание, вы должны извлечь из него урок...   -  person rubber boots    schedule 18.10.2014
comment
@rubberboots Мне не разрешено читать из CSV-файла. Файл будет иметь расширение .dat с текстовыми значениями.   -  person Souradeep Sinha    schedule 18.10.2014
comment
прочитать строки файла с помощью fgets() и извлечь слова из каждой строки с помощью strtok(). Изучите документацию по этим функциям, например: cplusplus.com/reference/cstring/strtok   -  person rubber boots    schedule 18.10.2014
comment
@SouradeepSinha: Как уже упоминалось @rubber boots, просто попробуйте еще раз. Также опубликуйте фактическое содержимое ваших .dat файлов.   -  person ani627    schedule 18.10.2014
comment
Спасибо @rubberboots за ссылку. Я сейчас дочитаю.   -  person Souradeep Sinha    schedule 18.10.2014
comment
Этот вопрос кажется не по теме, потому что он просто запрашивает код, а не пытается его решить.   -  person Almo    schedule 18.10.2014
comment
@ 1336087 Мне еще не дали файл .dat. Я должен сделать один из своих в данном формате. Оценщик будет использовать свой собственный файл .dat со всеми возможными тестовыми примерами.   -  person Souradeep Sinha    schedule 18.10.2014
comment
@rubberboots Спасибо за помощь. Решил наконец.   -  person Souradeep Sinha    schedule 19.10.2014


Ответы (1)


Спасибо @rubberboots за помощь.

#include <stdio.h>
#include <string.h>

void main()
{
    FILE *fp = fopen("user.dat", "r");
    const char s[2] = ", ";
    char *token;
    int i;
    if(fp != NULL)
    {
        char line[20];
        while(fgets(line, sizeof line, fp) != NULL)
        {
            token = strtok(line, s);
            for(i=0;i<2;i++)
            {
                if(i==0)
                {   
                    printf("%s\t",token);
                    token = strtok(NULL,s);
                } else {
                    printf("%d\n",atoi(token));
                }       
            }
        }
        fclose(fp);
    } else {
        perror("user.dat");
    }   
}   

файл user.dat:

1000, 76

0095, 81

2910, 178

0001, 1

Выход:

1000 76

0095 81

2910 178

0001 1

person Souradeep Sinha    schedule 18.10.2014
comment
Любопытно, а зачем печатать строковую версию прочитанного для первого числа и использовать числовую версию для второго числа? Не было бы более последовательным либо печатать как строки, либо как числа? - person chux - Reinstate Monica; 19.10.2014
comment
Проблемы с назначением. Для меня это тоже не имеет особого смысла. Я думаю, профессор хотел, чтобы мы научились и убили двух зайцев одним оператором printf. :П - person Souradeep Sinha; 20.10.2014