Распарсить текстовый файл - C (СИ)
Формулировка задачи:
Добрый вечер!
Подскажите пожалуйста. Я новичок в языке С, как мне отформатировать файл вот такого вида:
Нужно, что бы в массив можно было загнать только эти данные:
Ну или вывести на экран, просто не могу сообразить, как его заставить соблюдать строчный порядок?
Есть функция переноса строки?
За ранние спасибо!
Bly-bly vly uuu kjskdkn dslkmdlksd 122 dwnlld .2.2..2. wkddw dwmsmkmdlsmlkdmslkmdn nsnd wd n String1K1 String1k2 String1k3 String2k1 String2k2 String2k3 String3k1 String3k2 String3k3
String1K1 String1k2 String1k3 String2k1 String2k2 String2k3 String3k1 String3k2 String3k3
Решение задачи: «Распарсить текстовый файл»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_B 256 struct qwe{ char k1[128]; char k2[128]; }qw[MAX_B]; int main(void) { FILE *fl; char *buff; puts("Welcome My Soft!!!"); if((fl=fopen("./test.txt","r"))==NULL) exit(1); int y=0; int b; while(!feof(fl)) { buff=malloc(MAX_B * sizeof(char)); fgets(buff,MAX_B,fl); int z; int r=0; b=1; for(z=0;z<MAX_B;z++) { if((buff[z] == ' ' || buff[z] == '\n') && (b == 2)) { break; } if((buff[z] != ' ' || buff[z] != '\n') && (b == 2)) { qw[y].k2[r]=buff[z]; r++; continue; } // if((buff[z] == ' ' || buff[z] == '\n') && (b == 1)) { b=2; r=0; continue; } if((buff[z] != ' ' || buff[z] != '\n') && (b == 1)) { qw[y].k1[r]=buff[z]; r++; } // } y++; free(buff); } fclose(fl); int u; for(u=0;u<y;u++) printf("%s * %s \n",qw[u].k1,qw[u].k2); puts("The END!!!"); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
stdio.h
для работы с вводом/выводомstdlib.h
для работы с функциями общего назначенияstring.h
для работы со строками
- Определяем константу:
#define MAX_B 256
- максимальное количество элементов в массиве
- Определяем структуру данных:
struct qwe{ char k1[128]; char k2[128]; }qw[MAX_B];
- структура данных с двумя полями: k1 и k2, каждое из которых является массивом символов на 128 элементов
- В функции main() открываем файл:
if((fl=fopen(
./test.txt,
r))==NULL) exit(1);
- если файл не может быть открыт, программа завершается
- Создаем переменные:
int y=0;
- счетчик для подсчета количества заполненных элементов массиваint b=1;
- флаг, определяющий текущий режим заполнения полей k1 и k2int r=0;
- счетчик для подсчета количества символов в текущем поле (k1 или k2)
- Запускаем цикл while:
while(!feof(fl))
- цикл выполняется до тех пор, пока не достигнут конец файла
- Выделяем память под буфер:
buff=malloc(MAX_B * sizeof(char));
- выделение памяти под буфер, размер которого равен MAX_B символам
- Заполняем буфер:
fgets(buff,MAX_B,fl);
- чтение строки из файла в буфер
- Запускаем внутренний цикл for:
for(z=0;z<MAX_B;z++)
- цикл выполняется для каждого символа в буфере
- Определяем условия для заполнения полей k1 и k2:
if((buff[z] == ' ' || buff[z] == '\n') && (b == 2))
- если текущий символ является пробелом или символом новой строки и флаг b равен 2, то прерываем внутренний циклif((buff[z] != ' ' || buff[z] != '\n') && (b == 2))
- если текущий символ не является пробелом или символом новой строки и флаг b равен 2, то записываем его в поле k2if((buff[z] == ' ' || buff[z] == '\n') && (b == 1))
- если текущий символ является пробелом или символом новой строки и флаг b равен 1, то меняем значение флага b на 2if((buff[z] != ' ' || buff[z] == '\n') && (b == 1))
- если текущий символ не является пробелом или символом новой строки и флаг b равен 1, то записываем его в поле k1
- Увеличиваем счетчики:
y++;
- увеличение счетчика y на 1r++;
- увеличение счетчика r на 1
- Свободим память под буфер:
free(buff);
- освобождение памяти под буфер
- Закрываем файл:
fclose(fl);
- закрытие файла
- Запускаем цикл for для вывода заполненных данных:
for(u=0;u<y;u++) printf(
%s * %s \n,qw[u].k1,qw[u].k2);
- цикл выполняется для каждого заполненного элемента массива qw, выводя его поля k1 и k2
- Выводим сообщение об окончании работы программы:
puts(
The END!!!);
- вывод сообщенияThe END!!!
- Завершаем функцию main():
return 0;
- возврат 0, что означает успешное завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д