Міністерство освіти і науки України
НУ ”Львівська політехніка”
Кафедра ЕОМ
Звіт
про виконання лабораторної роботи №10
з курсу: „Засоби системного програмування”
на тему
Опрацювання файлів з текстовою інформацією
Тема роботи: Опрацювання файлів з текстовою інформацією.
Мета роботи: Закріпити теоретичні знання та оволодіти практичними навиками в створенні програм для опрацювання текстової інформації, що міститься в дискових файлах. Засвоїти основні методи читання, запису даних з дискових файлів текстового типу.
Завдання на лабораторну роботу
Розробити програмне забезпечення зі застосуванням техніки роботи з дисковими файлами відповідно до заданого варіанту.
Програмне забезпечення повинно складатися з декількох модулів. Основна програма вводить та виводить дані які опрацьовуються функціями, що реалізовані як окремі модулі.
Назву текстового файлу, в якому містяться дані для опрацювання, передавати через аргументи функції main().
Розміри та значення елементів матриць (в загальному не квадратних) вводити з текстового файлу. Параметри, що задають кількість рядків та стовпців повинні бути іменованими.
Пам’ять під матриці виділяти динамічно. Для трикутних матриць (опираючись на їх структуру) виділяти мінімальні об’єми пам’яті.
Обмін даними з функцією, що опрацьовує матрицю, виконувати через її аргументи.
Результати обчислень записувати в текстовий файл. Назву файлу для запису результатів формувати на основі назви файлу з вхідними даними шляхом заміни розширення.
Звернути особливу увагу на обробку помилок, які користувач може зробити при створені текстового файлу з вхідними даними.
При вирішенні задач забезпечити дружній інтерфейс з користувачем.
Індивідуальне завдання: Перестановка заданих (за запитом) рядків матриці
Результати виконання роботи.
Текст програми:
int input(char *filename,char *filetmp);
int output(char *filename,char *filetmp);
int sort(char *filetmp);
# include <stdio.h>
# include <conio.h>
# include <string.h>
# include "labst_10.h"
FILE *fp,*fq,*ftmp;
int m,n,*Matrix[100][100];
int main(int argc, char *argv[])
{
int j,i;
char *filename,*filetmp;
clrscr();
n=0;m=0;
if (argc!=2) {printf("Eror read file..."); return 0;}
else strcpy(filename,argv[1]);
strcpy(filetmp,filename);
*(filetmp+strlen(filetmp)-4)='\0';
strcat(filetmp,".bin");
if (input(filename,filetmp)==1)
{
sort(filetmp);
printf("\n Output results..");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<m;j++)
printf("M[%d][%d]=%d ",i,j,*Matrix[i][j]);
}
*(filename+strlen(filename)-4)='\0';
strcat(filename,".out");
output(filename,filetmp);
}
return 0;
}
# include <stdlib.h>
# include <stdio.h>
# include <string.h>
# include <io.h>
extern FILE *fp,*ftmp;
int input(char *filename,char *filetmp)
{
char *tmp;
extern int n,m,*Matrix[100][100];
int i,j;
fp=fopen(filename,"rt");
ftmp=fopen(filetmp,"wb");
fscanf(fp,"%s",tmp);
if (strstr(tmp,"n=")!=NULL) sscanf((tmp+2),"%d",&n);
else if (strstr(tmp,"m=")!=NULL) sscanf((tmp+2),"%d",&m);
fscanf(fp,"%s",tmp);
if (strstr(tmp,"n=")!=NULL) sscanf((tmp+2),"%d",&n);
else if (strstr(tmp,"m=")!=NULL) sscanf((tmp+2),"%d",&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if ((Matrix[i][j]=(int *)malloc(sizeof(int)))==NULL)
{
printf("Not enought memory!!!");
return 0;
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
fscanf(fp,"%s",tmp);
sscanf(tmp,"%d",Matrix[i][j]);
}
write(ftmp->fd,Matrix,n*m);
fclose(fp);
fclose(ftmp);
if (n==0 || m==0) {printf("Eror..."); return 0;}
else return 1;
}
# include <stdio.h>
# include <io.h>
extern FILE *fq,*ftmp;
int output(char *filename,char *filetmp)
{
extern int n,m,*Matrix[100][100];
int i,j;
fq=fopen(filename,"wt");
ftmp=fopen(filetmp,"rb");
read(ftmp->fd,Matrix,n*m);
if (fq==NULL) {puts("\nEror create output file!!!");return 0; }
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
fprintf(fq,"%d",*Matrix[i][j]);
fprintf(fq,"%s"," ");
}
fprintf(fq,"%s","\n");
}
fclose(fq);
fclose(ftmp);
return 1;
}
# include <stdio.h>
# include <io.h>
extern FILE *ftmp;
void sort(char *filetmp)
{
int line[10],l1,l2,j,i;
extern const int n,m;
int *Matrix[100][100];
ftmp=fopen(filetmp,"rb");
read(ftmp->fd,Matrix,n*m);
do
{
printf("\nEnter number of line1 to change line2");
scanf("%d %d",&l1,&l2);
}
while ((l1>=n)||(l2>=n));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("\n Matrix[%d][%d]=%d",i,j,*Matrix[i][j]);
for(j=0;j<m;j++)
{
line[j]=*Matrix[l1][j];
*Matrix[l1][j]=*Matrix[l2][j];
*Matrix[l2][j]=line[j];
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf("\n Matrix[%d][%d]=%d",i,j,*Matrix[i][j]);
ftmp=fopen(filetmp,"wb");
write(ftmp->fd,Matrix,n*m);
}
Внаслідок виконання програми на екрані отримаємо:
..\labst_10.exe
Висновок: на даній лабораторній роботі я оволодів практичними навиками роботи з текстовими файлами на мові Сі.