Как без гемороя сохранить короткий текст в файле?
От: ste5112  
Дата: 03.08.12 19:29
Оценка:
Я уже 6 часов (не подряд!) бьюсь.Я плохо знаю С++ , но за несколько минут написал программу выводяшую в файл string-массив(каждая строка кончается на "\n").А вот назад взять строки в массив — никак.Есть ли способ не используя сторонние библиотеки и св-ва сред типа C++ Builder или Visual studio сохранить текст в файле?Если да то как?
P.S. так же желательно без всяких самопальных бинарных форматов и т.п.Используя запись через fstream, желательно объяснить, как работает функция.
Для особо любопытных:
Я хотел бы сделать программу, которая задает вопросы типа:"каков смысл жизни?", запоминает ответ пользователя, а в качестве своего ответа подпихивает случайный из ответов предидушего пользователя, все получилось, кроме вывода массива ответов из файла.
Re: Как без гемороя сохранить короткий текст в файле?
От: ML380 Земля  
Дата: 03.08.12 19:49
Оценка:
Здравствуйте, ste5112, Вы писали:

S>написал программу выводяшую в файл string-массив(каждая строка кончается на "\n").А вот назад взять строки в массив — никак.


http://www.cplusplus.com/reference/iostream/istream/getline/
Re: Как без гемороя сохранить короткий текст в файле?
От: pzhy  
Дата: 03.08.12 19:58
Оценка:
Здравствуйте, ste5112, Вы писали:

S>Я уже 6 часов (не подряд!) бьюсь.Я плохо знаю С++ , но за несколько минут написал программу выводяшую в файл string-массив(каждая строка кончается на "\n").А вот назад взять строки в массив — никак.Есть ли способ не используя сторонние библиотеки и св-ва сред типа C++ Builder или Visual studio сохранить текст в файле?Если да то как?

S>P.S. так же желательно без всяких самопальных бинарных форматов и т.п.Используя запись через fstream, желательно объяснить, как работает функция.
S>Для особо любопытных:
S> Я хотел бы сделать программу, которая задает вопросы типа:"каков смысл жизни?", запоминает ответ пользователя, а в качестве своего ответа подпихивает случайный из ответов предидушего пользователя, все получилось, кроме вывода массива ответов из файла.


#include <iostream>

void main()
{
    std::cout << "42";
}
s
Re[2]: Как без гемороя сохранить короткий текст в файле?
От: ste5112  
Дата: 04.08.12 10:49
Оценка:
P>
P>#include <iostream>

P>void main()
P>{
P>    std::cout << "42";
P>}
P>


Это что?
Re: Как без гемороя сохранить короткий текст в файле?
От: ste5112  
Дата: 04.08.12 10:50
Оценка:
Здравствуйте, ste5112, Вы писали:

S>Я уже 6 часов (не подряд!) бьюсь.Я плохо знаю С++ , но за несколько минут написал программу выводяшую в файл string-массив(каждая строка кончается на "\n").А вот назад взять строки в массив — никак.Есть ли способ не используя сторонние библиотеки и св-ва сред типа C++ Builder или Visual studio сохранить текст в файле?Если да то как?

S>P.S. так же желательно без всяких самопальных бинарных форматов и т.п.Используя запись через fstream, желательно объяснить, как работает функция.
S>Для особо любопытных:
S> Я хотел бы сделать программу, которая задает вопросы типа:"каков смысл жизни?", запоминает ответ пользователя, а в качестве своего ответа подпихивает случайный из ответов предидушего пользователя, все получилось, кроме вывода массива ответов из файла.
Спасибо, но я не могу найти как работает getline() , английский я не знаю достаточно хорошо, а в рунете не найти нормального объяснения.
Re[3]: Как без гемороя сохранить короткий текст в файле?
От: Философ Ад http://vk.com/id10256428
Дата: 04.08.12 10:54
Оценка: :)
Здравствуйте, ste5112, Вы писали:

S>Это что?


абсолютно валидный и абсолютно универсальный ответ на все вопросы.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Как без гемороя сохранить короткий текст в файле?
От: enji  
Дата: 04.08.12 13:31
Оценка: 1 (1)
Здравствуйте, ste5112, Вы писали:

S>Спасибо, но я не могу найти как работает getline() , английский я не знаю достаточно хорошо, а в рунете не найти нормального объяснения.


здесь краткое описание и пример. Английский там технический и очень простой, если уж совсем никак — гуглопереводчик вполне справляется:

Читает в неформатированные данные из потока в строку. Остановки раз характер равно разделитель не найден, или поток исчерпан. Первый вариант используется разделитель в качестве разделителя, вторая версия использует '\ п' в качестве разделителя.Символ-разделитель удаляется из потока и не помещается в строку.

Re: Как без гемороя сохранить короткий текст в файле?
От: PlusMyTwitterFace  
Дата: 04.08.12 13:51
Оценка:
Я так и не понял, что Вам надо получить в итоге.

Вы вроде говорите:

S>за несколько минут написал программу выводяшую в файл string-массив


Но тут же:

S>Есть ли способ не используя сторонние библиотеки и св-ва сред типа C++ Builder или Visual studio сохранить текст в файле?


Так у Вас сохранить или считать из файла не получается?

Можно сделать, например, так:

#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>

const std::string filename = "file.txt";

void write()
{
    std::vector<std::string> myvec = { "first", "second" };

    try
    {
        std::ofstream f;
        f.exceptions(std::ios_base::failbit | std::ios_base::badbit);
        f.open(filename);

        for (const auto& e : myvec)
        {
            f << e << '\n';
        }
    }
    catch (const std::ios_base::failure& e)
    {
        std::cerr << "*** Error \n";
    }
}

void read()
{
    std::vector<std::string> myvec;

    std::ifstream f(filename);
    if (!f)
    {
        std::cerr << "*** Error \n";
        return;
    }

    std::copy((std::istream_iterator<std::string>(f)), std::istream_iterator<std::string>(), std::back_inserter(myvec));

    std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}

int main()
{
    write();
    read();
}
Re: Как без гемороя сохранить короткий текст в файле?
От: Abyx Россия  
Дата: 04.08.12 13:55
Оценка:
Здравствуйте, ste5112, Вы писали:

S>Я уже 6 часов (не подряд!) бьюсь.Я плохо знаю С++ , но за несколько минут написал программу выводяшую в файл string-массив(каждая строка кончается на "\n").А вот назад взять строки в массив — никак.Есть ли способ не используя сторонние библиотеки и св-ва сред типа C++ Builder или Visual studio сохранить текст в файле?Если да то как?

S>P.S. так же желательно без всяких самопальных бинарных форматов и т.п.Используя запись через fstream, желательно объяснить, как работает функция.
S>Для особо любопытных:
S> Я хотел бы сделать программу, которая задает вопросы типа:"каков смысл жизни?", запоминает ответ пользователя, а в качестве своего ответа подпихивает случайный из ответов предидушего пользователя, все получилось, кроме вывода массива ответов из файла.

#include <Windows.h> и WritePrivateProfileString, ReadPrivateProfileString
In Zen We Trust
Re[2]: Как без гемороя сохранить короткий текст в файле?
От: PlusMyTwitterFace  
Дата: 04.08.12 14:43
Оценка:
В принципе, функцию write в таком случае можно написать так:

void write()
{
    std::vector<std::string> myvec = { "first", "second" };

    std::ofstream f(filename);
    if (!f)
    {
        std::cerr << "*** Error \n";
        return;
    }

    std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::string>(f, "\n"));
}
Re[3]: Как без гемороя сохранить короткий текст в файле?
От: PlusMyTwitterFace  
Дата: 05.08.12 10:51
Оценка:
Или так, если речь идёт о запросе данных у пользователя:

void write()
{
    std::vector<std::string> myvec;

    std::copy((std::istream_iterator<std::string>(std::cin)), std::istream_iterator<std::string>(), std::back_inserter(myvec));

    std::ofstream f(filename);
    if (!f)
    {
        std::cerr << "*** Error \n";
        return;
    }

    std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::string>(f, "\n"));
}
Re: Как без гемороя сохранить короткий текст в файле?
От: MasterZiv СССР  
Дата: 06.08.12 20:44
Оценка:
On 08/03/2012 11:29 PM, ste5112 wrote:

> Я уже 6 часов (не подряд!) бьюсь.Я плохо знаю С++ , но за несколько минут

> написал программу выводяшую в файл string-массив(каждая строка кончается на
> "\n").А вот назад взять строки в массив — никак.

На самом деле действительно задачи по сложности несопоставимые. При выводе
объем данных известен, всё определено. При вводе -- наоборот, объём неизвестен,
нужно динамически строить эти структуры данных. Так что всё закономерно.


> запоминает ответ пользователя, а в качестве своего ответа подпихивает случайный

> из ответов предидушего пользователя, все получилось, кроме вывода массива
> ответов из файла.
Может быть всё-таки ввода ?


http://www.cplusplus.com/reference/string/getline/
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Как без гемороя сохранить короткий текст в файле?
От: igna Россия  
Дата: 09.08.12 08:16
Оценка:
Здравствуйте, PlusMyTwitterFace, Вы писали:

PMT>void read()
PMT>{
PMT>    std::vector<std::string> myvec;

PMT>    std::ifstream f(filename);
PMT>    if (!f)
PMT>    {
PMT>        std::cerr << "*** Error \n";
PMT>        return;
PMT>    }

PMT>    std::copy((std::istream_iterator<std::string>(f)), std::istream_iterator<std::string>(), std::back_inserter(myvec));

PMT>    std::copy(myvec.begin(), myvec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
PMT>}


Здесь ошибка, при чтении пробелы будут использоваться в качестве разделителей, поэтому запишем к примеру:

aaa bbb ccc


А прочитаем:

aaa
bbb
ccc


Кроме того не стоит создавать пустой вектор, чтобы затем заполнить его содержимым файла; лучше сделать это при инициализации, заодно появится возможность объявить вектор константным:

    std::vector<std::string> const myvec((std::istream_iterator<std::string>(f)), std::istream_iterator<std::string>());
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.