kkate4ka
@kkate4ka
глупенькая девочка

Как работать текстовыми файлами?

Дан текстовый файл, в котором на первой строке хранится количество символов, а на второй строка.
и на выходе заменить гласные буквы пробелами, но это сейчас не важно.
как считать 2 строчки с файла?
вот так я создала текстовый файл :
20
Hello World!


и вот считываю, но выводится только "20", почему так?
char str[100];
	FILE *file_ptr;
    
    file_ptr = fopen("C:/c/file.txt", "r + a");
    if (file_ptr != NULL)
    {
    	fgets (str, 100, file_ptr);
    	fprintf(stdout, "%s\n",  str);
    }
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 2
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Потому что нормальный алгоритм работы с мелкими текстовиками следующий:

открыть файл на чтение (man open - внимание, не потоковый fopen, а простой open!)
получить размер файла из элемента оглавления каталога (man stat)
выделить память размером с файл (man calloc)
прочитать весь файл целиком (man read)
закрыть файл (man close)
и после этого парсить полученный буфер как угодно вдоль и поперек, не забывая конечно, что портить его не надо :)

Ну или вот так наверно понятнее будет:
#define NUL 0
  #define ERR -1
  int i;
  short int handle;
  struct stat sb;
  char *name="/tmp/testfile.txt";
  char *data;

  if ((handle = open(name, O_RDONLY)) < NUL)
    return ERR;

  stat(name, &sb);
  data = (char *) сalloc(sb.st_size + 1);
  i = read(handle, data, sb.st_size);
  close(handle);

На выходе - массив data с данными файла.
Ищещь перевод строки ('\n') и переставляешь указатель ЗА него (если нужно конвертить число в цифру то после перестановки на место перевода строки пишешь '\0' и используешь atoi() - на выходе длина строки, которая идет в качестве контроля, чтобы на SIGSEGV случайно не выскочить.
Потом от нового положения указателя цикл по длине строки с поиском по таблице замен.

Вот блин...ведь мамой клялся, что подсказывать не буду...
Ответ написан
2ord
@2ord
Потому что с файла считана лишь первая строка, а нужно считать обе.
Кроме того, по окончанию работы с файлом нужно закрывать файл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы