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

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

Войти
Регистрация
Восстановить пароль
 
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
#1

Прочесть ту или иную строку из файла - C++

24.01.2014, 06:22. Просмотров 252. Ответов 7
Метки нет (Все метки)

Есть у меня текстовый файл с кириллицей, хочу обращаться в этом файле к определенным строкам, которые содержат id книги(#1,#2 и #3) через определенные промежутки, что-то у меня не получается, помогите, знающие.
Вот biblioteka.txt
XML
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
#1
      Жанр
  Комильфо
        52
  Буткевич
      2012
    Москва*
    Додека*
       232
        58
        16
   Абрамов
#2
Художество
   Природа
        75
    Пушкин
      2011
      Киев*
    Додека*
       500
        20
         5
     Юрьев
#3
      Жанр
  Название
        23
     Автор
      2014
Издательство
      Киев
       230
       250
      2015
       ФИО
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int* getID(void)
{
    ifstream fin("biblioteka.txt");
    char str[1000]=" ";//40
    int *books=new int[1000];//50
    memset(books, 0, sizeof(int)*10);//51
    long in=0;
    while(!fin.eof())
    {
        
        fin.getline(str,13);
        if(strncmp(str,"#",1))
        {
            return books;
        }
        if(!strncmp(str,"#",1))
        {
            books[in]=atoi(str+1);
            in++;
        }
    }
     return books;
}
Вот , что накидал, тут функция возвращает массив ID-ов, к каждому из которых по порядку можем обращаться как getID()[n], этот код работал с другим форматом, но появлялись крякозябры, а с кириллицей никак не вяжется, разъясните пожалуйста, как будет правильный код, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 06:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прочесть ту или иную строку из файла (C++):

Где и почему используют ту или иную строку std::string, char[], System::String^ ? - C++
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

Прочесть строку сишным способом(фопен) - C++
Добрый день. Есть необходимость прочесть определенную строку(по номеру) используя стандартный ввод/вывод си, и не используя getline(). Как...

Строка: можно ли прочесть строку по словам? - C++
здравствуйте, подскажите пожалуйста можно ли прочесть с или с++ строку по словам ?

Как прочесть из файла в multimap по строчно? - C++
Есть такой текстовый файл с названием фильмов. Текст: 7 Batman vs Superman 4 Batman vs Superman 5 Pirates of the Caribbean...

Записать\прочесть данные в\из бинарного файла в инкапсулированну структуру - C++
Здравствуйте форумчане. Как записать\прочесть данные в\из бинарного файла в инкапсулированну структуру такого вида? struct obj { ...

Из файла прочесть массив, а результат работы программы записать в файл - C++
На практике дали задание, в котором надо из файла прочесть массив, а результат работы программы записать в файл. Как это сделать? В...

7
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 06:46 #2
Задача туманна. Зачем вам массив ID-ов? Эти ID-ы, что из себя представляют? Порядковый номер записи в файле? Или какой-либо ID, связанный, именно, с книгой?

Добавлено через 1 минуту
В файле структуры записаны?
0
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
24.01.2014, 07:56  [ТС] #3
Ну это, как бы база данных, где каждая книга имеет ИД, по этим ИДам я хочу обращаться к книгам для запросов и удаления. Это обычный текстовый файл, просто проблема работать с кириллицей под консоль, вот прощу подсказки.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 08:07 #4
Цитата Сообщение от WebSofter Посмотреть сообщение
просто проблема работать с кириллицей под консоль
Опишите конкретно в чём проблема. Русский текст не выводится нормально, или что?
0
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
24.01.2014, 08:44  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Опишите конкретно в чём проблема. Русский текст не выводится нормально, или что?
Хочу по порядковому номеру узнать ИД книги, т.е. есть функция getID(), который возвращает массив всех существующих ИДов и мне надо ввести номер порядка книги и узнать ее ИД, т.е. getID()[1] будет возвращать ИД первой книги, если какая-то книга удалена, к примеру вторая, то getID()[2] будет возвращать ИД 3 т.е. ИД и порядок могут не совпадать по прчине удаления книги по этому ИДу
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 19:24 #6
Цитата Сообщение от WebSofter Посмотреть сообщение
Хочу по порядковому номеру узнать ИД книги, т.е. есть функция getID(), который возвращает массив всех существующих ИДов и мне надо ввести номер порядка книги и узнать ее ИД, т.е. getID()[1] будет возвращать ИД первой книги, если какая-то книга удалена, к примеру вторая, то getID()[2] будет возвращать ИД 3 т.е. ИД и порядок могут не совпадать по прчине удаления книги по этому ИДу
Проблема с кирилицей здесь каким боком?

Добавлено через 9 минут
И на вопросы не отвечаете:
Цитата Сообщение от alsav22 Посмотреть сообщение
В файле структуры записаны?
Добавлено через 28 минут
Если записи в файле - структуры:
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
#include <iostream>
#include <fstream>
using namespace std;
 
int getID(int books[])
{
    ifstream fin("biblioteka.txt");
    if (!fin) 
        cout << "Error!" << endl;
    else
    {
        long in = 0;
        char ch;
        while(fin)
        {
            if (fin >> ch >> books[in]) // пропускаем первый символ # и читаем, число за ним, в масссив
                in++;
            for (int i = 0; i < 12; ++i) // пропускаем '\n' этой строки и ещё 11 строк с полями структуры
                fin.ignore(100, '\n');
        }
        return in; // количество считанных ID
    }
    
    return 0;
}
 
 
int main()
{
    int books[1000]; // массив под ID
    
    int number = getID(books);
    
    if (number) // если считаны ID
        for (int i = 0; i < number; ++i) 
            cout << books[i] << ' ';
    
    cin.get();
    return 0;
 }
Добавлено через 6 минут
Если в файле структуры, то нет никакой необходимости разделять их какими-либо образом (типа: строкой со спецсимволом #). Достаточно сделать ID первым полем структуры. Тогда, для создания массива ID, просто считывается каждое первое поле структуры в файле.
Строки-разделители, со спецсимволами, имеет смысл применять, когда записи по книгам имеют разный размер.
1
Миниатюры
Прочесть ту или иную строку из файла  
MrGluck
Модератор
Эксперт CЭксперт С++
7418 / 4533 / 673
Регистрация: 29.11.2010
Сообщений: 12,287
24.01.2014, 20:52 #7
Цитата Сообщение от WebSofter Посмотреть сообщение
появлялись крякозябры, а с кириллицей никак не вяжется, разъясните пожалуйста, как будет правильный код, спасибо.
сохранять в UTF-8, считывать в std::wstring через std::wifstream
0
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
25.01.2014, 20:14  [ТС] #8
Благодарю за код, работает
0
25.01.2014, 20:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 20:14
Привет! Вот еще темы с ответами:

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

Как прочесть несколько слов из файла в динамический массив char и добавить новое значение в конец? - C++
Никак не могу разобраться. Есть текстовый файл в виде: 3 Mop floor Clean windows Mow lawn цифра 3 это количесво...

Как прочесть из текстового файла строку по номеру? - C++ Qt
Здравствуйте. Сделал так, но уж слишком громоздко: QFile file; file.setFileName(&quot;/home/practic/amr/grabber/user_agents.txt&quot;); ...

Нарисовать ту или иную фигуру по введенной команде - Turbo Pascal
Напишите задачи на паскале. 1. С клавиатуры вводятся буквы команд рисования простейших фигур со случайным выбором координат, размера и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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