Как оптимальнее прочитать текст из файла - целиком или поблочно? - C (СИ)
Формулировка задачи:
#include "stdafx.h" #include <conio.h> #include <locale.h> #include <string> char buf[8388609]={}; int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL,"RUS"); char filename[20]={}; printf("Введите название файла:"); gets(filename); FILE*f=fopen(filename,"rt"); int size_of_file=ftell(f); fread(buf,size_of_file,1,f); printf("%s",buf); }
Решение задачи: «Как оптимальнее прочитать текст из файла - целиком или поблочно?»
textual
Листинг программы
#include "stdafx.h" #include <conio.h> #include <locale.h> #include <string> char *buf; int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL,"RUS"); char filename[20]={}; // printf("Введите название файла:"); //gets(filename); FILE*f=fopen("file.txt","rt"); if ((f = fopen("file.txt", "rt")) == NULL ) { printf("Не удается открыть файл!"); exit(1); } fseek(f,0,SEEK_END); int size_of_file=ftell(f); fseek(f,0,SEEK_SET); buf=(char*)malloc(size_of_file+1); buf[size_of_file+1]=0; fread(buf,size_of_file,1,f); puts(buf); //char str1[100]={}; char rez[100]={}; int cnt=0; char exit[5]="exit"; int len=255; //Длина строки char **Massiv=(char**)malloc((size_of_file+1)*sizeof(char)); for (int i=0;i<(size_of_file+1);i++) Massiv[i]=(char*)malloc(len); int cntmass=0; while(cnt<size_of_file-2) { int i=cnt,cntrez=0; for(i;i<size_of_file;i++,cntrez++) { if(buf[i]!=' ') rez[cntrez]=buf[i]; else { cnt=i; break; } } Massiv[cntmass]=rez; printf("%s ",Massiv[i]); cntmass++; int y=strlen(rez); for(int j=0;j<=y;j++) rez[j]=0; cnt++; if(i==size_of_file) { cnt=i; } } /*for(int i=0;i<cntmass;i++) printf("\n%s\n",Massiv[i]);*/ free(Massiv); fclose(f); getch(); return 0; }
Объяснение кода листинга программы
- В начале кода устанавливается русская локаль с помощью
setlocale(LC_ALL,
RUS)
. - Создается пустая строка
filename
для ввода имени файла. - Подключаются необходимые заголовочные файлы.
- Объявляются переменные:
buf
для чтения содержимого файла,filename
для ввода имени файла,f
для работы с файлом,size_of_file
для хранения размера файла,rez
для хранения прочитанных данных,cnt
для подсчета количества прочитанных символов,exit
для проверки наличия команды выхода,len
для длины строки в массиве,Massiv
для хранения массива строк. - Открывается файл с помощью
fopen(
file.txt,
rt)
и проверяется на открытие с помощьюf == NULL
. - Получается размер файла с помощью
fseek(f,0,SEEK_END)
иftell(f)
. - Смещается обратно в начало файла с помощью
fseek(f,0,SEEK_SET)
. - Выделяется память для
buf
с помощьюmalloc(size_of_file+1)
. - Выделяется память для массива строк с помощью
malloc((size_of_file+1)*sizeof(char))
. - Создается цикл для чтения содержимого файла и разделения его на строки.
- В каждой итерации цикла проверяется, является ли текущий символ пробелом.
- Если символ не является пробелом, он добавляется в
rez
. - После каждой итерации
cnt
увеличивается на 1. - После каждой строки
Massiv
добавляется в массив строк. - После окончания чтения файла выводится содержимое массива строк.
- Все выделенные памяти освобождаются с помощью
free()
. - Файл закрывается с помощью
fclose()
. - Ожидается нажатие клавиши с помощью
getch()
. - Возвращается 0, что означает успешное выполнение программы.
- Код не содержит ошибок, и программа будет выполняться без проблем.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д