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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
VN
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 90
#1

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

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

При помощи ifstream
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 12:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как считать файл до конца вместе '\n' ? (C++):

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

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

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

Считать символы из потока ввода вместе с пробелами - C++
Всем привет. есть перегрузка ввода istream &operator>> (istream &input,book &b) { cout<<"Name of the book - ";input>>b.name; ...

Нужно считать с конца файла определенное число символов - C++
Нужно считать с конца файла определенное число символов.

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
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
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
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
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.02.2013, 14:28 #5
У Вас чтение по словам идет. А цикла нет. Нужно 7-8 строки обернуть в цикл
C++ (Qt)
1
2
while( !in.eof() )
   {...}
. И зачем Вам установка бинарного режима, если файл текстовый? ios::ate также не понятно зачем. Откуда пример брали?
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:40 #6
Цитата Сообщение от MrGrig Посмотреть сообщение
'\n' это вообще то символ перехода на новую строчку и он отлично считывается.
get(char&, int) вообще не считает, getline(char&, int) считает, но не сохранит.

Добавлено через 6 минут
Цитата Сообщение от VN Посмотреть сообщение
будет только "привет"((. как сделать что бы прочелся весь файл?
Читать с помощью getline() каждую строку в цикле, пока не конец файла. К каждой строке добавлять '\n'.
0
Пaтрик
415 / 390 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
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;
}
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:42 #8
Если открыли в бинарном режиме, то определить размер файла(количество байтов), создать под это буффер (массив char), и считать файл через read().
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
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
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.02.2013, 14:59 #11
Самый просой способ aLarman предлагает. Если хотите сохранить файл в строку, то:
C++
1
2
3
4
5
...
string buffer;
....
string.append(c);
...
0
ForEveR
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
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
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2013, 15:21 #13
http://www.cplusplus.com/reference/i.../istream/read/ там пример, то что тебе надо)
0
alsav22
5420 / 4816 / 442
Регистрация: 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
Avazart
Эксперт С++
7192 / 5366 / 280
Регистрация: 10.12.2010
Сообщений: 23,675
Записей в блоге: 17
19.02.2013, 16:53 #15
http://www.cyberforum.ru/blogs/131347/custom19.html
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 16:53
Привет! Вот еще темы с ответами:

как считать весь файл ? - C++
char buff; ifstream fin(&quot;/Users/Vitaly/Desktop/laba2/laba2/list.txt&quot;,ios_base::in); fin&gt;&gt;buff,50; cout&lt;&lt;buff; ...

Как считать и записать в файл? - C++
Доброго времени суток. Вопрос вот в чем. Реализую md5 алгоритм шифрования и финальным штрихом является считывание из файла незашифрованного...

Как считать файл с табличкой? - C++
Добрый вечер! Подскажите пожалуйста : у меня есть файл в формате txt, в котором находится табличка (с числами) 15*5. Его нужно считать!...

Как можно считать файл *.pas или *.cpp как текстовый ? - C++
ifstream abc (&quot;*.pas&quot;,ios::text); не работает, ибо у ios нет параметра text


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.02.2013, 16:53
Ответ Создать тему
Опции темы

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