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

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

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

Author24 — интернет-сервис помощи студентам
При помощи ifstream
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2013, 12:42
Ответы с готовыми решениями:

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

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

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

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

20
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 13:00 2
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 3
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
0
VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 13:32  [ТС] 4
фаил:

привет '\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 5
У Вас чтение по словам идет. А цикла нет. Нужно 7-8 строки обернуть в цикл
C++ (Qt)
1
2
while( !in.eof() )
   {...}
. И зачем Вам установка бинарного режима, если файл текстовый? ios::ate также не понятно зачем. Откуда пример брали?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:40 6
Цитата Сообщение от MrGrig Посмотреть сообщение
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
get(char&, int) вообще не считает, getline(char&, int) считает, но не сохранит.

Добавлено через 6 минут
Цитата Сообщение от VN Посмотреть сообщение
будет только "привет"((. как сделать что бы прочелся весь файл?
Читать с помощью getline() каждую строку в цикле, пока не конец файла. К каждой строке добавлять '\n'.
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
19.02.2013, 14:42 7
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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:42 8
Если открыли в бинарном режиме, то определить размер файла(количество байтов), создать под это буффер (массив char), и считать файл через read().
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 14:45 9
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
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 14:56  [ТС] 10
"У Вас чтение по словам идет. А цикла нет. Нужно 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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:59 11
Самый просой способ aLarman предлагает. Если хотите сохранить файл в строку, то:
C++
1
2
3
4
5
...
string buffer;
....
string.append(c);
...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.02.2013, 15:02 12
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 13
http://www.cplusplus.com/refer... ream/read/ там пример, то что тебе надо)
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 16:27 14
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
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 16:53 15
https://www.cyberforum.ru/blog... tom19.html
1
VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 17:32  [ТС] 16
вообще то я именно от туда воркараунд нашел.
Воркараунд потому что этот пример работает только с 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 17
а buffer по твоему не стринг?)
0
VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 17:38  [ТС] 18
а buffer по твоему не стринг?)
char * Это константный указатель на область памяти по которому находится строка
string Это тип данных с которым будет в дальнейшем удобней работать чем с char так как у string много функторов и функций специально для строки.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
19.02.2013, 18:19 19
Цитата Сообщение от VN Посмотреть сообщение
char * Это константный указатель
не обязательно константный)

Цитата Сообщение от VN Посмотреть сообщение
C++
1
string buffer;
ничего не говорит? тебе что надо стринг или нет?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2013, 18:19 20
Если работать со string и std::back_inserter() не плохо бы знать "средний" размер файла что бы заранее сделать
s.reserve(sr_size) для что быстрее было ...
0
19.02.2013, 18:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2013, 18:19
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru