Чтение данных из строки в C (например, scanf)

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

Я читаю каждую строчку так:

/* Read the whole file into an array */
char read_lines[FILE_LENGTH][FILE_WIDTH];
for(i=0;i<FILE_LENGTH;i++) {
    fscanf(data_file, "%[^\n]", read_lines[i]);
    fscanf(data_file, "%[\n]", dump);
}

Мне нужно прочитать данные в каждой строке, которая отформатирована как %d\t%d\t%d\t%d\t%d, и я не совсем уверен, как прочитать конкретную переменную в функцию сканирования. Я знаю, что fscanf() читает из файла, а scanf() читает из пользовательского ввода, есть ли функция, которая читает из переменной?

Я исхожу из фона python, и в python я бы просто использовал следующий код:

read_lines = open('file.txt').readlines()
for line in lines:
    i = lines.index(line)
    first[i], second[i], third[i], forth[i], fifth[i] = line.split('\t')

Я действительно не понимаю, как сделать эквивалент в C. Я провел немало исследований, но не нашел ничего полезного. Любая помощь будет оценена по достоинству!

Спасибо!


person Durand    schedule 02.02.2011    source источник


Ответы (2)


Возможно, проверьте sscanf. Он похож на своего двоюродного брата scanf и fscanf, но вместо этого принимает строку. Вот фрагмент из приведенной выше ссылки.

Функция sscanf принимает строку, из которой можно прочитать ввод, а затем, подобно printf и связанным с ней функциям, принимает строку шаблона и ряд связанных аргументов. Он пытается сопоставить строку шаблона со строкой, из которой он считывает ввод, используя спецификатор преобразования, такой как у printf.

person Andrew White    schedule 02.02.2011
comment
Аааа! Большое спасибо, sscanf вроде не нашелся в моих поисках, это именно то, что мне нужно. - person Durand; 02.02.2011

Вы можете использовать функцию strtok [прочитайте справочную страницу], чтобы разделить строку

например http://www.gnu.org/s/libc/manual/html_node/Finding-Tokens-in-a-String.html

person Foo Bah    schedule 02.02.2011
comment
Спасибо, это очень полезно, я, вероятно, буду использовать это в будущем, но я думаю, что использование sscanf(), вероятно, является более простым вариантом в C, тогда как я решил использовать split() в python, потому что там это был более простой выбор. - person Durand; 02.02.2011
comment
@Durand, вы можете сделать то же самое в python - кроме того, код python, который вы указали, не интерпретирует автоматически поля как целые числа. - person Foo Bah; 02.02.2011
comment
Да, вам нужно будет использовать: первый [i], второй [i], третий [i], четвертый [i], пятый [i] = [int (i) for in line.split ('\ t')] - person Durand; 02.02.2011