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

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

Восстановить пароль Регистрация
 
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
24.01.2014, 06:22     Прочесть ту или иную строку из файла #1
Есть у меня текстовый файл с кириллицей, хочу обращаться в этом файле к определенным строкам, которые содержат 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], этот код работал с другим форматом, но появлялись крякозябры, а с кириллицей никак не вяжется, разъясните пожалуйста, как будет правильный код, спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 06:22     Прочесть ту или иную строку из файла
Посмотрите здесь:

C++ Прочесть строку сишным способом(фопен)
C++ Строка: можно ли прочесть строку по словам?
Не работает код (программа считывает из файла строку, убирает лишние пробелы и записывает в другой файл строку, словами наоборот) C++
C++ Прочесть данные с массива
Если последовательность отсортирована по возрастанию, оставить ее без изменения. Иначе получить иную последовательность C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 06:46     Прочесть ту или иную строку из файла #2
Задача туманна. Зачем вам массив ID-ов? Эти ID-ы, что из себя представляют? Порядковый номер записи в файле? Или какой-либо ID, связанный, именно, с книгой?

Добавлено через 1 минуту
В файле структуры записаны?
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
24.01.2014, 07:56  [ТС]     Прочесть ту или иную строку из файла #3
Ну это, как бы база данных, где каждая книга имеет ИД, по этим ИДам я хочу обращаться к книгам для запросов и удаления. Это обычный текстовый файл, просто проблема работать с кириллицей под консоль, вот прощу подсказки.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 08:07     Прочесть ту или иную строку из файла #4
Цитата Сообщение от WebSofter Посмотреть сообщение
просто проблема работать с кириллицей под консоль
Опишите конкретно в чём проблема. Русский текст не выводится нормально, или что?
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
24.01.2014, 08:44  [ТС]     Прочесть ту или иную строку из файла #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Опишите конкретно в чём проблема. Русский текст не выводится нормально, или что?
Хочу по порядковому номеру узнать ИД книги, т.е. есть функция getID(), который возвращает массив всех существующих ИДов и мне надо ввести номер порядка книги и узнать ее ИД, т.е. getID()[1] будет возвращать ИД первой книги, если какая-то книга удалена, к примеру вторая, то getID()[2] будет возвращать ИД 3 т.е. ИД и порядок могут не совпадать по прчине удаления книги по этому ИДу
alsav22
5282 / 4801 / 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, просто считывается каждое первое поле структуры в файле.
Строки-разделители, со спецсимволами, имеет смысл применять, когда записи по книгам имеют разный размер.
Миниатюры
Прочесть ту или иную строку из файла  
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
24.01.2014, 20:52     Прочесть ту или иную строку из файла #7
Цитата Сообщение от WebSofter Посмотреть сообщение
появлялись крякозябры, а с кириллицей никак не вяжется, разъясните пожалуйста, как будет правильный код, спасибо.
сохранять в UTF-8, считывать в std::wstring через std::wifstream
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 20:14     Прочесть ту или иную строку из файла
Еще ссылки по теме:

C++ Из файла прочесть массив, а результат работы программы записать в файл
C++ Записать\прочесть данные в\из бинарного файла в инкапсулированну структуру
C++ Преобразовать строку из файла, содержащую запись десятичного числа, в строку с двоичным числом

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

Или воспользуйтесь поиском по форуму:
WebSofter
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 52
25.01.2014, 20:14  [ТС]     Прочесть ту или иную строку из файла #8
Благодарю за код, работает
Yandex
Объявления
25.01.2014, 20:14     Прочесть ту или иную строку из файла
Ответ Создать тему
Опции темы

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