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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 12:42     Как считать файл до конца вместе '\n' ? #1
При помощи ifstream
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 12:42     Как считать файл до конца вместе '\n' ?
Посмотрите здесь:

C++ Как правильно считать побайтово файл в массив
C++ Подскажите как побайтно считать файл
как считать весь файл ? C++
Как считать файл с табличкой? C++
C++ Считать числа до конца строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 13:00     Как считать файл до конца вместе '\n' ? #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;
//использование символа с//
}
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
19.02.2013, 13:06     Как считать файл до конца вместе '\n' ? #3
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 13:32  [ТС]     Как считать файл до конца вместе '\n' ? #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';
}
будет только "привет"((. как сделать что бы прочелся весь файл?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.02.2013, 14:28     Как считать файл до конца вместе '\n' ? #5
У Вас чтение по словам идет. А цикла нет. Нужно 7-8 строки обернуть в цикл
C++ (Qt)
1
2
while( !in.eof() )
   {...}
. И зачем Вам установка бинарного режима, если файл текстовый? ios::ate также не понятно зачем. Откуда пример брали?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:40     Как считать файл до конца вместе '\n' ? #6
Цитата Сообщение от MrGrig Посмотреть сообщение
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
get(char&, int) вообще не считает, getline(char&, int) считает, но не сохранит.

Добавлено через 6 минут
Цитата Сообщение от VN Посмотреть сообщение
будет только "привет"((. как сделать что бы прочелся весь файл?
Читать с помощью getline() каждую строку в цикле, пока не конец файла. К каждой строке добавлять '\n'.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
19.02.2013, 14:42     Как считать файл до конца вместе '\n' ? #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;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:42     Как считать файл до конца вместе '\n' ? #8
Если открыли в бинарном режиме, то определить размер файла(количество байтов), создать под это буффер (массив char), и считать файл через read().
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 14:45     Как считать файл до конца вместе '\n' ? #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);
    }
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 14:56  [ТС]     Как считать файл до конца вместе '\n' ? #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';
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:59     Как считать файл до конца вместе '\n' ? #11
Самый просой способ aLarman предлагает. Если хотите сохранить файл в строку, то:
C++
1
2
3
4
5
...
string buffer;
....
string.append(c);
...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.02.2013, 15:02     Как считать файл до конца вместе '\n' ? #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
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 15:21     Как считать файл до конца вместе '\n' ? #13
http://www.cplusplus.com/reference/i.../istream/read/ там пример, то что тебе надо)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 16:27     Как считать файл до конца вместе '\n' ? #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;
}
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
19.02.2013, 16:53     Как считать файл до конца вместе '\n' ? #15
http://www.cyberforum.ru/blogs/131347/custom19.html
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 17:32  [ТС]     Как считать файл до конца вместе '\n' ? #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';
}
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 17:33     Как считать файл до конца вместе '\n' ? #17
а buffer по твоему не стринг?)
VN
 Аватар для VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
19.02.2013, 17:38  [ТС]     Как считать файл до конца вместе '\n' ? #18
а buffer по твоему не стринг?)
char * Это константный указатель на область памяти по которому находится строка
string Это тип данных с которым будет в дальнейшем удобней работать чем с char так как у string много функторов и функций специально для строки.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 18:19     Как считать файл до конца вместе '\n' ? #19
Цитата Сообщение от VN Посмотреть сообщение
char * Это константный указатель
не обязательно константный)

Цитата Сообщение от VN Посмотреть сообщение
C++
1
string buffer;
ничего не говорит? тебе что надо стринг или нет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 18:19     Как считать файл до конца вместе '\n' ?
Еще ссылки по теме:

Как считать файл построчно записывая в другой файл? C++
Как считать в цикле файл до символа перевода каретки? C++
С клавиатуры ввести текст, признаком конца ввода считать точку C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,604
Записей в блоге: 17
19.02.2013, 18:19     Как считать файл до конца вместе '\n' ? #20
Если работать со string и std::back_inserter() не плохо бы знать "средний" размер файла что бы заранее сделать
s.reserve(sr_size) для что быстрее было ...
Yandex
Объявления
19.02.2013, 18:19     Как считать файл до конца вместе '\n' ?
Ответ Создать тему
Опции темы

Текущее время: 04:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru