Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/47: Рейтинг темы: голосов - 47, средняя оценка - 4.66
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390

Как правильно открыть файл и считать из него строку?

08.09.2011, 11:52. Показов 10492. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прювет!
подскажите пажалста, как правильно открыть и считать строку из файла.
весь функционал по обработке уже написал, а тут застрял как внебрачный ребенок буратино >_<

C++
1
2
3
4
5
6
7
8
9
10
11
12
    std::ifstream file("C:\\interface.txt");
    std::string lines;
 
    if(file.is_open()){
            std::string buff;
            while( !file.eof()){
                    std::getline(file, buff);
                    lines += buff + '\n';
            } file.close();
            std::cout << lines << std::endl;
    } else
            std::cerr << "Error open file!\n";
ошибка: variable 'std::ifstream file' has initializer but incomplete type
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2011, 11:52
Ответы с готовыми решениями:

Открыть файл и считать с него данные
как открыть файл и записать с него данные? вот пример того что может быть в файле: 14 42 33 a 2 2 g 3 3 1 2 2 нужно первую...

MFC: открыть файл и считать данные из него в буфер
Здравствуйте. Начала изучать MFC, возникла проблема с файлами. У меня задание, открыть файл и считать данные из него в буфер. Проблема...

Открыть файл и считать из него числа с N-ой строки в одномерный массив
Народ, нужна помощь! с ВБ только знакомлюсь. Необходимо в программе при нажатии на кнопку открыть файл считать из него числа с N-ой...

40
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:02
Студворк — интернет-сервис помощи студентам
-=ЮрА=-, отследите топик, это уже другой вопрос. Просто Lupus его тут разместил.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.09.2011, 13:03
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
вот твой код всего с 1-м дополнением
Возможно переполнение, если длина слова больше 255. И почему бы сразу в buff не читать.
0
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
09.09.2011, 13:07  [ТС]
дополнений два.
вышибает из-за переполнения буфера на середине.

уже была получена стабильная рабочая схема действий ))

всего-то в цикле условие изменено (while (std::getline(buf, src)) { ... } ).
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
09.09.2011, 13:09
Цитата Сообщение от Deviaphan Посмотреть сообщение
И почему бы сразу в buff не читать.
- компилятор старенький и даже так не хочет преобразовывать в read(buff.c_str()

Цитата Сообщение от Deviaphan Посмотреть сообщение
Возможно переполнение, если длина слова больше 255
слово не может иметь столько символов, разрыв всегда найдётся, но в общем случае да возможен такой вариант (хотя и маловероятен для файлов из реальной жизни)
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
даже так не хочет преобразовывать в read(buff.c_str()
-=ЮрА=-, вы пытаетесь читать типа

C++
1
2
string buff;
cin >> buff.c_str();
?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
09.09.2011, 13:12
Цитата Сообщение от co6ak Посмотреть сообщение
всего-то в цикле условие изменено (while (std::getline(buf, src)) { ... } )
- принял к сведению
Цитата Сообщение от co6ak Посмотреть сообщение
вышибает из-за переполнения буфера на середине.
- наверное в lines больше возможно записываем?
0
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
09.09.2011, 13:12  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- компилятор старенький и даже так не хочет преобразовывать в read(buff.c_str()

слово не может иметь столько символов, разрыв всегда найдётся, но в общем случае да возможен такой вариант (хотя и маловероятен для файлов из реальной жизни)

это в текстах.

а вот идет огромный шифрованный текст монолитом ) чо тогда)

имхо, делать динамический буфер и читать всю строку.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
09.09.2011, 13:19
Цитата Сообщение от co6ak Посмотреть сообщение
всего-то в цикле условие изменено (while (std::getline(buf, src)) { ... } )
- принял к сведению
Цитата Сообщение от co6ak Посмотреть сообщение
вышибает из-за переполнения буфера на середине.
- наверное в lines больше возможно записываем?

Добавлено через 5 минут
Цитата Сообщение от co6ak Посмотреть сообщение
имхо, делать динамический буфер и читать всю строку.
C++
1
2
3
4
5
6
7
8
9
10
char * str = malloc(sizeof(char));
 
FILE * f = fopen("Path","rb+");
fseek(f,0,SEEK_END);
long fLen = ftell(f);
fseek(f,0,SEEK_SET);
str = (char *)realloc(str,(1 + fLen)*sizeof(char));
fread(str,fLen,1,f);
fclose(f)
str[fLen] = '\0';
Лично мной проверено на файле 108 Мб, но думаю и больше можно, только долго считывание будет идти...
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:22
-=ЮрА=-, а если файл такой:

Code
1
2
3
4
5
6
7
8
9
10
а
аб 
абв
фы
акк
ваи
235
аы
456
р
и так девятьсот мегабайт

Сколько времени вы потратите на то, чтобы выделять каждый раз по четыре байта и во что вы превратите кучу?

Добавлено через 1 минуту
-=ЮрА=-, уже обе проблемы решены.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
09.09.2011, 13:26
Цитата Сообщение от talis Посмотреть сообщение
и так девятьсот мегабайт
- Будет ОЗУ 4 гига - налету считаю...
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 13:28
хорошо, образ раздела в 34 Гб?

Добавлено через 27 секунд
Обе проблемы уже решены.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
09.09.2011, 14:12
Цитата Сообщение от talis Посмотреть сообщение
хорошо, образ раздела в 34 Гб?
- хорошо ОЗУ 64 Гб
В карифорнии есть суперкомп производительнотью 10^13 там ОЗУ по моему терабайтик - ну вот я им
0
09.09.2011, 14:13

Не по теме:

-=ЮрА=-, удачи вам в оплате счёта за электроэнергию.

0
09.09.2011, 14:15

Не по теме:

Ага, и как видно из кода, все 32 гига выводится в cout... читайте... :D

1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
09.09.2011, 14:30
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ага, и как видно из кода, все 32 гига выводится в cout... читайте..
- пусть частями из str выводит, лишь бы ОЗУ хватало



PS:Ребят это к вам
Не по теме:
Кукушка хвалит петуха за то что хвалит он кукушку
-
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 14:32
-=ЮрА=-, проблемы этого топика решены. Ответы даны и приняты. Чего вы добиваетесь?
0
09.09.2011, 15:06

Не по теме:

Цитата Сообщение от talis Посмотреть сообщение
Чего вы добиваетесь?
Стресс-тестирование форума.

1
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
09.09.2011, 15:08  [ТС]
вспомним тему "программа Hello world!" ))

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

на то и существую программисты. их задача - найти наиболее оптимальное решение
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.09.2011, 16:50
Цитата Сообщение от co6ak Посмотреть сообщение
на то и существую программисты. их задача - найти наиболее оптимальное решение

Не по теме:

Оптимум - наилучшее из всех возможных. Поэтому не бывает "более оптимального" или "менее оптимального". Бывает хорошее, лучше (более хорошее), и наилучшее (оно же "оптимальное"). Вы же не скажите "наиболее наилучшее" или "наименее наилучшее" :)

0
 Аватар для Lupus
24 / 24 / 4
Регистрация: 13.03.2011
Сообщений: 326
10.09.2011, 14:38
Цитата Сообщение от talis Посмотреть сообщение
Lupus,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// возвращает первый символ после конца слова
// если до слова встречается \n
// возвращает \n, выставляет первый байт
// buff в 0 (теперь strlen( buff ) == 0 )
char getword( istream &is, char * buff, size_t max )
{
    char ch;
    size_t i = 0;
 
    while( isspace( ch = is.get() ) )
       if( ch == '\n' )
       {
           buff[i] = 0;
           return ch;
       }
 
    do buff[i++] = ch;
    while( !isspace( ch = is.get() ) && i + 1 < max );
 
    buff[i] = 0;
 
    return ch;
}
Добавлено через 33 секунды
вот тест:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main()
{
    char buff[256];
 
    ifstream fs( "input.txt", ios::in );
 
    if( !fs.is_open() )
       return 1;
 
    do
    {
        char ret = getword( fs, buff, 256 );
 
        if( strlen(buff) == 0 && ret == '\n' )     \\??????????????????
           cout << " [EOL]\n";
        else if( fs.eof() )
           cout << " [EOF]\n";
        else
           cout << buff << ' ';
    }
    while( fs.good() && !fs.eof() );
 
    return 0;
}
Спасибо, только я не понял, зачем длину буфера проверять? Достаточно же было условия по ret?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2011, 14:38
Помогаю со студенческими работами здесь

Открыть txt файл через OpenFileDialog и считать из него текста
Подскажите , как в виндовс формс правильно написать часть кода , для открытия txt файла через OpenFileDialog , и считывания от туда текста...

Открыть файл и записать в него строку
Здравствуйте! Подскажите пожалуйста почему вылетает такая ошибка, когда запускаю в visual studio? #include &quot;stdafx.h&quot; ...

Создать файл. Записать в него строку. Считать и вывести на экран
Файл создает и записывает в него текст, но на экран не выводит. В чем может быть ошибка? Помогите пожалуйста! ;Определения stdout equ...

Открыть файл, считать строку из 10 символов и вывести ее. Почему не работает мой код?
model small .stack 254 .data fname db 'stroka1.txt',0h des dw 0 buff db 20 dup (?) .code start: mov ax,@data

Файл: Как можно открыть файл txt и занести из него данные в массив?
как можно открыть файл txt и занести из него данные в массив, а после из этого массива вывести в выпадающий список значения? заранее...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru