Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
#1

Посимвольное чтение из файла - C++

09.05.2013, 16:17. Просмотров 2051. Ответов 26
Метки нет (Все метки)

Всем добрый вечер (ночь)! Так сложилась ситуация что нужно мне посимвольно считать текст из файла fin в массив str[i][j], причем считывать надо только ДО символа переноса строки \n(включительно). Скажите пожалуйста почему не работает мой фрагмент (где-то зацикливается):
C++
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fin))
    {
        do
        {
            str[i][j]=fgetc(fin);
            j++;
        }
        while (str[i][j]!='\n');
        i++;
        j=0;
    }
Добавлено через 20 часов 24 минуты
По ходу выполнения чтения в str[0][0] записывается ноль и больше ничего не происходит. В чем косяк?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 16:17     Посимвольное чтение из файла
Посмотрите здесь:

Посимвольное чтение файла в вектор - C++
Вечер добрый. Есть файл sir.in.txt, содержащий строку ABC; посимвольно записываю его в вектор следующим образом: ifstream...

Посимвольное чтение - C++
В консоль подается текст содержащий такие выражения: а=3 b=7 z=32 a=1 y=2 b=7 "EOF"-конец. программа не обращает...

Посимвольное чтение массива char - C++
Производится чтение из файла.Определенный диапазон считывается в переменную.Необходимо произвести посимвольное чтение из переменной и...

Посимвольное чтение строки типа string - C++
Здравствуйте! Подскажите, пожалуйста. У меня есть строка типа string, нужно все цифры вывести на печать. Как сделать "пробежку по...

Посимвольное чтение, добавление в конец строки - C++
Программа должна брать из файла массив символов, читать посимвольно и к каждому символу в конец добавлять .txt. Выходит не совсем...

Как создать посимвольное чтение строки и загнать в массив - C++
В консоль подается строка вида "()(()))((", нужно создать динамический массив под нее, и загнать каждый символ строки туда, как это...

Посимвольное считывание из файла - C++
Добрый вечер уважаемые формучане. Помогите найти ошибку в коде программы, реализующей алгоритм Вермана. При запуске виснет вся среда. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
458 / 307 / 24
Регистрация: 22.03.2011
Сообщений: 1,003
Завершенные тесты: 2
09.05.2013, 16:42     Посимвольное чтение из файла #2
C++
1
2
3
4
5
6
    do
        {
            str[i][j]=fgetc(fin);
            j++; //<----------- Подумайте над этим) Подсказка, а именно о местоположении.
        }
        while (str[i][j]!='\n');
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 16:45     Посимвольное чтение из файла #3
C++
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fin))
    {
        do
        {
            str[i][j]=fgetc(fin);
            j++;
        }
        while (str[i][j-1]!='\n');
        i++;
        j=0;
    }
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 16:57  [ТС]     Посимвольное чтение из файла #4
Цитата Сообщение от stima Посмотреть сообщение
C++
1
2
3
4
5
6
    do
        {
            str[i][j]=fgetc(fin);
            j++; //<----------- Подумайте над этим) Подсказка, а именно о местоположении.
        }
        while (str[i][j]!='\n');
Насколько я понимаю тут все логично. заполнили 1 ячейку -> перешли на другую

Цитата Сообщение от metaluga145 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fin))
    {
        do
        {
            str[i][j]=fgetc(fin);
            j++;
        }
        while (str[i][j-1]!='\n');
        i++;
        j=0;
    }
аналогично зацикливается

Главная суть: Мне нужно сохранить текст из файла сохраняя форматирование (отдельная строка текста в отдельной строке массива[количество символов в строке меньше 80, но в каждой строке по-разному]). Возможно вы предложите лучшее решение
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 17:04     Посимвольное чтение из файла #5
Вам поможет функция getline
stima
458 / 307 / 24
Регистрация: 22.03.2011
Сообщений: 1,003
Завершенные тесты: 2
09.05.2013, 17:12     Посимвольное чтение из файла #6
Цитата Сообщение от undestroyer Посмотреть сообщение
Насколько я понимаю тут все логично. заполнили 1 ячейку -> перешли на другую
Какую вы ячейку проверяете? Дууумайте.
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 17:22  [ТС]     Посимвольное чтение из файла #7
Цитата Сообщение от stima Посмотреть сообщение
Какую вы ячейку проверяете? Дууумайте.
какую только что заполнил. do ... while сначала выполняет блок do{}, потом проверяет условие в while. Заполнил ячейку очередным символом, если это символ переноса строки, то перехожу на другую строку (i++), если нет - продолжаю получать символы в текущую строку. Правильно?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 17:25     Посимвольное чтение из файла #8
Цитата Сообщение от undestroyer Посмотреть сообщение
какую только что заполнил. do ... while сначала выполняет блок do{}, потом проверяет условие в while. Заполнил ячейку очередным символом, если это символ переноса строки, то перехожу на другую строку (i++), если нет - продолжаю получать символы в текущую строку. Правильно?
Нет. Сначала выполнится i++, а потом уже проверится условие
stima
458 / 307 / 24
Регистрация: 22.03.2011
Сообщений: 1,003
Завершенные тесты: 2
09.05.2013, 17:29     Посимвольное чтение из файла #9
1. Прочитали символ. Сохранили его в i(0)j(0)
2. Инкрементируем j. Теперь там 1.
3. Проверили ячейку i(0)j(1).

Вопрос: Ну и что мы проверяем?
Вопрос 2: Это С или C++? Если С++ то http://www.cplusplus.com/reference/i...istream/tellg/.
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 17:37  [ТС]     Посимвольное чтение из файла #10
Цитата Сообщение от metaluga145 Посмотреть сообщение
Нет. Сначала выполнится i++, а потом уже проверится условие
Спасибо, понял, но:
C++
1
2
3
4
5
6
7
8
9
10
11
while (!feof(fin))
    {
        j=0;
        do
        {
            str[i][j]=fgetc(fin);
            j++;
        }
        while (str[i][j-1]!='\n');
        i++;
    }
тоже где-то зацикливается.
Текст в тестируемом файле:
12354
4575
878
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 17:42     Посимвольное чтение из файла #11
попробуйте вместо feof написать EOF
stima
458 / 307 / 24
Регистрация: 22.03.2011
Сообщений: 1,003
Завершенные тесты: 2
09.05.2013, 17:49     Посимвольное чтение из файла #12
Вы не хотите думать). Ладно:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int read_all(FILE* in, char** buff)
{
   if (!in) return 0;
   if (*buff) free(buff);
 
   int count = fseek (in, 0 , SEEK_END);
   *buff= (char*)malloc(count * sizeof(char));
 
   if (!*buff) return 0;
 
   fread (*buff, sizeof(char), count , in);
 
   return count;
}
undestroyer
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 53
09.05.2013, 18:04  [ТС]     Посимвольное чтение из файла #13
Цитата Сообщение от metaluga145 Посмотреть сообщение
попробуйте вместо feof написать EOF
точно не то. ругается при компилировании (expression must have (pointer-to-) function type).
сейчас попробую переписать на getline

Добавлено через 15 минут
Цитата Сообщение от stima Посмотреть сообщение
Вы не хотите думать). Ладно:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int read_all(FILE* in, char** buff)
{
   if (!in) return 0;
   if (*buff) free(buff);
 
   int count = fseek (in, 0 , SEEK_END);
   *buff= (char*)malloc(count * sizeof(char));
 
   if (!*buff) return 0;
 
   fread (*buff, sizeof(char), count , in);
 
   return count;
}
спасибо за код, возможно его и возьму, только не понимаю для чего вы мне возвращаете count...
stima
458 / 307 / 24
Регистрация: 22.03.2011
Сообщений: 1,003
Завершенные тесты: 2
09.05.2013, 18:05     Посимвольное чтение из файла #14
Это стандартная практика. Например если вы дальше будете записывать в файл? Что обратно цикл? или сразу блок в count charов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 18:13     Посимвольное чтение из файла
Еще ссылки по теме:

Посимвольное считывание из файла - C++
Нужно считать данные из файла посимвольно, при этом не все подряд, а, например из 1й строчки с 5 символа, из 7 с 8 и тд. Кол-во строчек...

Как заполнить файл и как осуществить посимвольное чтение - C++
решила задачу с файлами на высоком уровне, а нужно на низком, помогите плиз!!!не могу разобраться как заполнить файл и как осуществить...

Посимвольное считывание из файла в массив int - C++
Вообщем есть файл с числами(там всегда будут числа). Примерно такого содержания Нужно по символьно считать все цифры в...

Посимвольное считывание из файла и проверка на наличие (+ показать количество операторов) - C++
Условия задачи: Из файла необходимо считывать посимвольно (нельзя прочитать сразу весь файл или по строкам). Так же нельзя дублировать...

Чтение из файла - C++
Задача состоит в следующем. Есть файл, в котором в трех колонках размещены по 5 подлежащих, сказуемых и определений. В программе эти слова...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 18:13     Посимвольное чтение из файла #15
stima, у меня пару вопросов по Вашему коду.
http://www.cplusplus.com/reference/cstdio/fseek/
fseek возвращает 0, если все прошло удачно. Да? что делает эта строка ?
C++
1
int count = fseek (in, 0 , SEEK_END);
Добавлено через 2 минуты
Кроме этого надо было сохранить каждую строку файла в отдельную строку. Вместо этого все что было в файле, оказалось в буфере. Как разобрать где там какая строка?
Yandex
Объявления
09.05.2013, 18:13     Посимвольное чтение из файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru