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

Считывание из файла в массив string и int

22.05.2017, 19:37. Показов 1686. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу вставить позицию разделителя после определения числовой переменной.
Вылетает с ошибкой abort() has been called при вставке кода вместо комментариев.

В файле строка вида BName | Publisher | Author | 1990 | PUBL | 10


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
30
31
32
33
34
35
36
        void LoadData1()
    {
        fstream file;
        string::size_type pos;
        file.open("Article.txt");
        Shop article;
        string str;
        string separ(" | ");
 
 
        while (getline(file, str)) {
            pos = str.find(separ);
            strcpy_s(article.BookName, str.substr(0, pos).c_str());
            str = str.substr(pos + separ.length());
 
            pos = str.find(separ);
            strcpy_s(article.Publisher, str.substr(0, pos).c_str());
            str = str.substr(pos + separ.length());
 
            pos = str.find(separ);
            strcpy_s(article.Author, str.substr(0, pos).c_str());
            str = str.substr(pos + separ.length());
 
/////От этого куска вылетает        pos = str.find(separ);
            article.Date[0] = atoi(str.c_str());
    /////От этого куска вылетает            str = str.substr(pos + separ.length());
 
            pos = str.find(separ);
            strcpy_s(article.NamePubl, str.substr(0, pos).c_str());
            str = str.substr(pos + separ.length());
 
            article.NPubl[0] = atoi(str.c_str());
 
            M.push_back(article);
        }
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2017, 19:37
Ответы с готовыми решениями:

Посимвольное считывание из файла в массив int
Вообщем есть файл с числами(там всегда будут числа). Примерно такого содержания Нужно по символьно считать все цифры в...

Считывание из текстового файла значения int
Сама задача: Задан файл целых чисел. Убрать из него числа, символьное представление которых не содержит заданной литеры - цифры....

Считывание\запись int из файла\в файл
как считать Int из файла потом его же записать?

5
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.05.2017, 22:44
Зачем это всё? Укажи getline() нужный разделитель и читай.
0
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 17
23.05.2017, 16:34  [ТС]
Можно уточнить конкретно кодом? Т.е. через гетлайн считать строку до разделителя, записать это в переменную. Затем строку в новую, но без переменной?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.05.2017, 06:47
Лучший ответ Сообщение было отмечено Duskie как решение

Решение

Цитата Сообщение от Duskie Посмотреть сообщение
уточнить конкретно кодом
Если данные в файле именно в таком формате (разделены, в строках, с помощью "пробел | пробел", и его нельзя изменить для упрощения чтения (например, убрать пробелы по сторонам от |)), то можно так:
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
struct Shop
{
    string name;
    string publisher;
    string author;
    int year;
    string publ;
    int n;
};
 
void trimmed(string& str)
{
    if (str.back() == ' ')
        str.pop_back();
}
 
int main()
{   
    ifstream fin("text.txt"); 
    if (fin)
    {
        vector <Shop> M;
        Shop article;
        while (getline(fin, article.name, '|').ignore())
        {
            trimmed(article.name);
            (getline(fin, article.publisher, '|')).ignore();
            trimmed(article.publisher);
            getline(fin, article.author, '|');
            trimmed(article.author);
            (fin >> article.year).ignore(3);
            getline(fin, article.publ, '|');
            trimmed(article.publ);
            (fin >> article.n).get();
 
            M.push_back(article);
        }
 
        for (int i = 0; i < M.size(); ++i)
        {
            cout << M[i].name   << '\n' << M[i].publisher << '\n'
                 << M[i].author << '\n' << M[i].year      << '\n' 
                 << M[i].publ   << '\n' << M[i].n         << '\n' << endl;
        }
 
     }
     else
           cout << "Error opening file!" << endl;
}
1
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 17
24.05.2017, 19:43  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Если данные в файле именно в таком формате (разделены, в строках, с помощью "пробел | пробел", и его нельзя изменить для упрощения чтения (например, убрать пробелы по сторонам от |)), то можно так:
Кликните здесь для просмотра всего текста
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
struct Shop
{
    string name;
    string publisher;
    string author;
    int year;
    string publ;
    int n;
};
 
void trimmed(string& str)
{
    if (str.back() == ' ')
        str.pop_back();
}
 
int main()
{   
    ifstream fin("text.txt"); 
    if (fin)
    {
        vector <Shop> M;
        Shop article;
        while (getline(fin, article.name, '|').ignore())
        {
            trimmed(article.name);
            (getline(fin, article.publisher, '|')).ignore();
            trimmed(article.publisher);
            getline(fin, article.author, '|');
            trimmed(article.author);
            (fin >> article.year).ignore(3);
            getline(fin, article.publ, '|');
            trimmed(article.publ);
            (fin >> article.n).get();
 
            M.push_back(article);
        }
 
        for (int i = 0; i < M.size(); ++i)
        {
            cout << M[i].name   << '\n' << M[i].publisher << '\n'
                 << M[i].author << '\n' << M[i].year      << '\n' 
                 << M[i].publ   << '\n' << M[i].n         << '\n' << endl;
        }
 
     }
     else
           cout << "Error opening file!" << endl;
}
А как переделать с типом char? У меня вся программа написана под символьный, стринг конфликтует.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.05.2017, 19:49
Цитата Сообщение от Duskie Посмотреть сообщение
А как переделать с типом char?
А так: взять и переделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2017, 19:49
Помогаю со студенческими работами здесь

Считывание string из файла
Есть текстовый файл. Первая строчка, в которой находится название не получается считать в string. Идущие за ним цифры считываются...

Считывание значений из файла (преобразование char в int)
Доброго времени суток. Столкнулся с такой проблемой. Была произведена запись числового массива int16 в файл в таком виде: ...

Считывание файла в вектор типа string
Дело в том, что в общем то не работает по какой-то причине функция eof(); и даёт true только 1 раз, может я что не так понял, но она должна...

Считывание строки из бинарного файла в string
Привет всем!! Помогите новичку понять почему происходит ошибка при считывании строки из файла. void LoadFile() { string j; ...

Не получается массив int из строки string
старая песня беру файл input.txt? в нем: 5 0 3 5 2 3 делаю fstream f(&quot;../input.txt&quot;);


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru