Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/68: Рейтинг темы: голосов - 68, средняя оценка - 4.65
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90

Как считать файл до конца вместе '\n' ?

19.02.2013, 12:42. Показов 14191. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При помощи ifstream
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2013, 12:42
Ответы с готовыми решениями:

Работа с FileStream - считать файл с конца
Здравствуйте! Пытался почитать мануалы по работе с FileStream, но ничего не понятно. Возьмем пример: Dim pathSource As String =...

Как считать целые числа, не определяя признак конца ввода?
Пользователю предлагается ввести несколько целых чисел (количество заранее неизвестно). Должна быть считана любая цифра.

Как можно считать данные после символа конца файла?
Кто-нибудь знает как можно считать данные после символа конца файла, если он стоит в середине файла. ))))) Если я правильно понимаю...

20
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 13:00
C++
1
2
3
4
5
6
7
8
9
10
ifstream in;
in.open("имя файла");
char c;
while(1)
{
in.get(c)
if(c==EOF)
break;
//использование символа с//
}
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
19.02.2013, 13:06
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
0
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 13:32  [ТС]
фаил:

привет '\n'
давно не виделись. '\n'
как дела? '\n'

C++
1
2
3
4
5
6
7
8
9
void file()
{
string buffer;
fstream in,out;
in.open ("file.txt",ios::in| ios:: binary|ios::ate);
in.seekg (0,ios::beg) //указатель на начало файла
in>>buffer;
cout<<buffer<<'\n';
}
будет только "привет"((. как сделать что бы прочелся весь файл?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.02.2013, 14:28
У Вас чтение по словам идет. А цикла нет. Нужно 7-8 строки обернуть в цикл
C++ (Qt)
1
2
while( !in.eof() )
   {...}
. И зачем Вам установка бинарного режима, если файл текстовый? ios::ate также не понятно зачем. Откуда пример брали?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:40
Цитата Сообщение от MrGrig Посмотреть сообщение
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
get(char&, int) вообще не считает, getline(char&, int) считает, но не сохранит.

Добавлено через 6 минут
Цитата Сообщение от VN Посмотреть сообщение
будет только "привет"((. как сделать что бы прочелся весь файл?
Читать с помощью getline() каждую строку в цикле, пока не конец файла. К каждой строке добавлять '\n'.
0
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
19.02.2013, 14:42
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
25
26
27
28
29
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <stdexcept>
 
std::string get_file_contents(const char *filename)
{
    std::ifstream ifs(filename, std::ios::binary);
    if (!ifs.is_open())
        throw std::runtime_error("Could not open file");
    std::ostringstream oss;
    oss << ifs.rdbuf();
    return oss.str();
}
 
int main()
{
    try
    {
        std::string s = get_file_contents("D:\\1.txt");
        std::cout << s << std::endl;
    }
    catch (const std::runtime_error& exc)
    {
        std::cout << exc.what() << std::endl;
    }
    return 0;
}
2
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:42
Если открыли в бинарном режиме, то определить размер файла(количество байтов), создать под это буффер (массив char), и считать файл через read().
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 14:45
C++
1
2
3
4
5
6
7
8
9
    std::ifstream in;
    in.open("имя_файла");
    char c;
    in.get(c);
    while(!in.eof())
    {
        cout<<c;
        in.get(c);
    }
0
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 14:56  [ТС]
"У Вас чтение по словам идет. А цикла нет. Нужно 7-8 строки обернуть в цикл "
тогда считывание идет до \n по строкам а не полностью весь файл в переменную string

Я не помню откуда брал пример но что с этим что без этого одинаково работает "| ios:: binary|ios::ate)"


Нашел workaround но через char * и преобразование типа.

Поправте если это плохо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void file()
{
 
string buffer;
int size;
fstream in,out;
in.open ("file.txt",ios::in| ios:: binary|ios::ate);
in.seekg (0,ios::end);
size=in.tellg();
in.seekg (0,ios::beg); //указатель на начало файла
char * arround =new char [size];
in.read(arround,size);
buffer = (string) arround;
delete [] arround;
cout<<buffer<<'\n';
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:59
Самый просой способ aLarman предлагает. Если хотите сохранить файл в строку, то:
C++
1
2
3
4
5
...
string buffer;
....
string.append(c);
...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.02.2013, 15:02
VN, Не нужно искать никаких workaroundов. Посмотрите что вам предложили в посте #7, так же добавлю такой вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
 
int main()
{
   std::ifstream ifs("file1.txt");
   if (ifs)
   {
      std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
      std::cout << str << std::endl;
   }
}
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
forever@pterois:~/My_pro1/cpp_pro$ cat file1.txt 
this is nothing
what is 23 its
now this is end
and 1234 hello
12 with
forever@pterois:~/My_pro1/cpp_pro$ g++ -o new new.cpp -Wall -pedantic -Wextra
forever@pterois:~/My_pro1/cpp_pro$ ./new
this is nothing
what is 23 its
now this is end
and 1234 hello
12 with
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 15:21
http://www.cplusplus.com/refer... ream/read/ там пример, то что тебе надо)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 16:27
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
25
26
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main() 
{
    setlocale(0, "");
    
    ifstream in("1.txt");
    
    char ch;
    string str;
    
    while (true)
    {
        in.get(ch);
        if (in.eof()) break;
        str.append(1, ch);
    }
    
    cout << str;
    
    system("pause"); 
    return 0;
}
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 16:53
https://www.cyberforum.ru/blog... tom19.html
1
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 17:32  [ТС]
вообще то я именно от туда воркараунд нашел.
Воркараунд потому что этот пример работает только с char* а не с string

повторяюсь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void file()
{
 
string buffer;
int size;
fstream in,out;
in.open ("file.txt",ios::in| ios:: binary|ios::ate);
in.seekg (0,ios::end);
size=in.tellg();
in.seekg (0,ios::beg); //указатель на начало файла
char * arround =new char [size];
in.read(arround,size);
buffer = (string) arround;
delete [] arround;
cout<<buffer<<'\n';
}
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 17:33
а buffer по твоему не стринг?)
0
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 17:38  [ТС]
а buffer по твоему не стринг?)
char * Это константный указатель на область памяти по которому находится строка
string Это тип данных с которым будет в дальнейшем удобней работать чем с char так как у string много функторов и функций специально для строки.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 18:19
Цитата Сообщение от VN Посмотреть сообщение
char * Это константный указатель
не обязательно константный)

Цитата Сообщение от VN Посмотреть сообщение
C++
1
string buffer;
ничего не говорит? тебе что надо стринг или нет?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 18:19
Если работать со string и std::back_inserter() не плохо бы знать "средний" размер файла что бы заранее сделать
s.reserve(sr_size) для что быстрее было ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2013, 18:19
Помогаю со студенческими работами здесь

как прочитать файл с конца
просьба подсказать как бы прочитать файл с конца, или что бы загнать значение одного string в другой только наоборот с конца тоеть...

Считать текст с конца
у меня есть файл с текстом example.txt, там 100000 символов мне нужно взять последние 100 символов(в конце) и записать в char text; ...

Как считать файл построчно записывая в другой файл?
1) Данная программа считывает только первую строку следующие строки она не трогает. Хотел решить данную проблему через while, но не знаю...

Как начать читать файл с конца?
Помогите плз... у меня есть файл, в нем записаны в строку 3 параметра, например 1 Петров Иван 2 Иванов Петя Дык нужно чтобы...

Считать числа до конца строки
В файле на вход подаётся несколько строчек с числами. Как можно считывать числа до конца, например, первой строки?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru