файла, передаваемого как параметр программы. Результат фильтрации исходного файла
записываются в файл с именем - res.txt.
Записи результата должны быть отсортированы с использованием наперед заданного
алгоритма сортировки. Используемый в задании алгоритм сортировки определяется
вариантом задания.
Исходный файл с данными формально представляет собой матрицу размера m×n , где
m - строки матрицы (число записей файла), n - число столбцов матрицы (поля записи,
разделенные символом форматирования).m,n наперед неизвестны.
Поля записи разделены ";",строки "\n".
Значение элементов матрицы может быть трех типов:
1. Целое.
2. Вещественное.
3. Строка символов(могут быть пробелы).
Фильтрация осуществляется по одному столбцу по условию <,> или =.
Например:FIELD:1 > 0(по первому полю)
Основные операции должны быть разнесены по отдельным функциям.
Так же должно быть реализовано динамическое распределение памяти.
В оперативной памяти исходный файл должен храниться в виде структуры.
Вот текст моей программы, она еще не полная, в ней полно ошибок и недостающих функций.
Основной мой вопрос: как считать из файла информацию в структуру, чтобы было пригодно затем фильтровать, сортировать данные. Сделал структуру из 3х типов с адресом последующей. Но не приложу ума, как после этого в нормальном порядке, а не с конца, анализировать файл и фильтровать его.Или стоит использовать лругую структуру?
Сохранение и сортировку представляю как делать.
Компилирую на gcc.
Жду любых предложений,вопросов по заданию. Надеюсь вы мне поможете. Заранее спасибо.
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct itabl{
int cl;
char sim[20];
double dr;}
struct tablic { struct itabl tabl;
struct tablic *inf; }
int read(char name[20],int,char,char kr[20]);
int krit(char);
void write(void);
int main(int argc, char **argv)
{
int t;
krit(argv[1]);
write(void);
}
int krit(char fname[20]) {
int f,v;
char z,k[50];
if (q==0) exit(2);
printf(“ Enter the filter\n FIELD: ”);
scanf(“%d [<>=]%s”,f,z,k);
read(fname,f,z,k);
return 0;
}
int read(char fn[20],ff,zz,kk) {
FILE *d,*r;
int tt,flag,k,m,n,ff;
char c;s[20],zz,kk[20];
struct tabl tb;
if ((d=fopen(fn,”r”))&&(r=fopen(“res.txt”,”w”))==NULL) {
printf(“Open error\n”);
tt=0;
exit(1); }
else {
printf(“Reading…\n”);
tt=1; }
tmp1=tmp2=NULL
while ((c=fgetc(d))!=EOF) {
flag=0;
if (!(tmp1=(struct tablic*)malloc(sizeof(struct tablic)))) {
printf("No memory\n");
exit(3); }
if ((c!='\n') {
if ((c!=';') {
s[i]=c;
i++; }
k=0;
m=0;
n=0;
if (isdigit(s[1])) {
for (j=0;j<i;j++) {
if (s[j]=='.') {
tmp1->tabl.dr=atof(s);
tmp1->inf=tmp2;
tmp2=tmp1
k++;
flag=1; } }
if (flag==0) {
tmp1->tabl.cl=atoi(s);
tmp1->inf=tmp2;
tmp2=tmp1
m++;
flag=1; }
if (flag==0) {
strcpy(tabl.sim,s);
tmp1->inf=tmp2;
tmp2=tmp1
n++; }
for(j=0;i<j;j++) free(s[j]);}
else // проверяем фильтр, затем сохраняем
}
return tt;
}
void write(void) {
/*Описание переменных*/
if (fclose(r)) {
printf(“Save error\n”);
exit(2); }
else
printf(“Saving…\n”);
fclose(d);
}