С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230

Запись в структуру из файла. База данных

17.12.2013, 17:33. Показов 3052. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите советом, очень нужно, т.к. собираюсь доделать за ближайшие часы.

Я пишу базу данных на основе двусвязного списка. Сделал, чтобы все записывалось в файл. Теперь пишу, чтобы можно было считать и дописать базу.

Вот в чем проблема:

вот моя база в txt:
Code
1
2
3
4
5
6
=================================================================
Name:          Number:          Size:          
dima          123213           123132         
leha          1231             12313          
misha        67568             5657           
=================================================================
По скольку таблиц в Сипипи я не знаю, делал табличку с помощью пробелов.
Теперь я построчно считываю файл в строки, разделяю на слова и пытаюсь запихнуть все это обратно в структуры.
Если кто знает более рац способ, сообщите пж.

вот на чем остановился:

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
char F[] = "A:/file2.txt";
ifstream infile;
infile.open(F,ios::in|ios::binary);
    
if(!infile.is_open()) // если файл не открыт
cout << "File can not be open!\n"; // сообщить об этом
else
{
        int SIZE = 67;
        infile.seekg(SIZE);
    int size;
    size = 80;
        string s;
        Data *y = new Data[n];
    const char separator[]=" ";
    for(int i=0;i<n;i++)
    {
              int count = 0;
        while (!infile.eof()))
        {
            getline(infile,s);
                        char *a = new char[120];
            strcpy(a, s.c_str() );
            ptr = strtok(a,separator);
                        cout<<s<<endl;
                }
                infile.close();
        }
}
у форума какая-то проблема с табуляцией, раньше такого не было. ..

В общем, по словам разделяется и выводится на экран, но вылетает ошибка связанная с памятью. Подозреваю, что из-за последней строчки с =====. Как ее не трогать я хз, сверху seekg использовал, а снизу как..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2013, 17:33
Ответы с готовыми решениями:

Запись данных из файла в структуру
Условие задачи ниже. Файл с данными: What are colors in Russian flag (from top to bottom)? Red, blue and white white, blue and red ...

Чтение данных из файла и запись в структуру
Не могу разобраться как реализовать чтение структуры из данных . Перечитал много всего, так и не понял. помогите пожалуйста. Заранее...

Неверная запись в структуру данных
Здравствуйте, прощу помощи в решении некоторых ошибок: Сам код: #include &lt;iostream&gt; #include &lt;windows.h&gt; #include...

23
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.12.2013, 18:47
Обчно, в файл всякую красоту не записывают, это только мешает обработке файла (в файл нужно только поля структур писать). Красоту можно и при выводе делать. Пропустить ненужную строку можно без seekg(), просто сделать чтение в какую-либо временную строку. Зачем читать строки и на слова разделять? Можно читать словами (infile >>) в поля структуры, или выводить (не знаю, что там нужно).
1
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
17.12.2013, 19:34  [ТС]
alsav22, а записи структур разделять пробелом?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.12.2013, 19:46
Цитата Сообщение от Greeezly Посмотреть сообщение
а записи структур разделять пробелом?
Зачем? Вы же знаете сколько полей в структуре.

Добавлено через 2 минуты
Если неизвестно сколько структур в файле, можно сначала посчитать (строки), чтобы нужный размер памяти выделить, или записывать, в начало файла (первой строкой), количество структур.

Добавлено через 6 минут
Если поля int и массивы char, то можно в бинарном режиме записывать\читать (хотя тут есть ньюансы, связанные с выравниваем структур в памяти).
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
17.12.2013, 21:06  [ТС]
объясните еще, почему у меня вот такой вывод пашет:
C++
1
2
3
4
5
ofstream outfile;
outfile.open(F,ios::out|ios::binary);
outfile<<x[i].Name;
outfile<<x[i].number;
outfile.close();
а вот такой не пашет:

C++
1
2
3
4
ofstream  outfile(F,ios::binary|ios::out);
for(int i=0;i<n;i++)
outfile.write((char*)&x[i],sizeof(x[i]));
outfile.close();
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.12.2013, 21:26
Что значит "пашет", "не пашет"?
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
17.12.2013, 21:55  [ТС]
работает\не работает
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
17.12.2013, 21:57
Цитата Сообщение от Greeezly Посмотреть сообщение
работает\неработает
Это не ответ... Проблему опишите, чтобы понятно было.
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
17.12.2013, 21:59  [ТС]
в обоих случаях компилятор не ругается. Только в "работающем" выводится все, что мне нужно. А в неработающем - первые несколько символов из имени. Тут явно какая-то заморочка с памятью - во-первых с переводом из собственного типа данных struct Data в char, а во-вторых результат менялся если менять выделяемую память - второй аргумент функции. Я его даже вручную задавал с запасом в 8 байт.
Я все варианты поперебрал, не робит и всё(

хотя такое уже много раз встречал в кодах, вот например:
главное тут
пост#8
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.12.2013, 00:34
Структуру покажите. Сколько там полей? В первом посте три, в пятом уже две... Надеюсь, там не string? Среда какая?
0
18 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 59
18.12.2013, 02:58
...
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
18.12.2013, 05:48  [ТС]
VS 2010, структура:
const char и int
C++
1
2
3
4
5
struct Data
{
char Name[25];
int number;
};
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.12.2013, 06:18
Такая - должна без особых проблем записываться в бинарном режиме. Если упростить:
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
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
 
struct Data
{
    char Name[25];
    int number;
};
 
 
int main()
{
    const int n = 3;
    char* str[3] = {"aaa aaa", "bbb bbb", "ccc ccc"};   
    
    Data* x = new Data[n];
    for(int i = 0; i < n; i++)
    {
        strcpy(x[i].Name, str[i]);
        x[i].number = i + 1;
    }
 
    char F[] = "file2.txt";
    ofstream  outfile(F, ios::binary | ios::out);
    for(int i = 0; i < n; i++)
        outfile.write((char*)&x[i], sizeof(x[i]));
    outfile.close();
    delete [] x;
    
    Data* y = new Data[n];
    ifstream infile(F, ios::in | ios::binary);
    if (!infile) cout << "Error!" << endl;
    else
    {
        for(int i = 0; i < n; i++)
        infile.read((char*)&y[i], sizeof(y[i]));
            infile.close();
 
        for(int i = 0; i < n; i++)
            cout << y[i].Name << ' ' << y[i].number << endl;
    }
    
    cout << endl;
    system("pause");
    return 0;
}
Можно ещё, для выравнивания структуры в памяти, попробовать так:
C++
1
2
3
4
5
6
7
#pragma pack(push, 1)
struct Data
{
    char Name[25];
    int number;
};
#pragma pack(pop)
Если не поможет, значит где-то, что-то не то делаете. Прийдётся весь код изучать.
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
18.12.2013, 06:36  [ТС]
использовал ваше чтение.

мой текст файл выглядит так:
Code
1
2
3
Timka 123
Julik 124114
Enigma 123123
вывод прилагается. лишнюю память наверное цепанули.

там где ввод не обращайте внимание, не весь код закомментил.
Миниатюры
Запись в структуру из файла. База данных  
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.12.2013, 17:26
Цитата Сообщение от Greeezly Посмотреть сообщение
использовал ваше чтение.
мой текст файл выглядит так:
Какое моё чтение? Бинарное? Но оно подходит только для бинарной записи. Если запись в файл делается в текстовом режиме, то и чтение - в текстовом. То же самое и для бинарных методов.
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
18.12.2013, 19:48  [ТС]
Оно подходит и для текстового, но только не всегда знаем точный объем памяти, который нужно выделить под рид.

Добавлено через 3 минуты
То что было нужно - сделал, спасибо Вам большое за помощь!
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.12.2013, 19:49
Цитата Сообщение от Greeezly Посмотреть сообщение
Оно подходит и для текстового
Сами придумали? О чём, вообще, разговор?
0
 Аватар для Greeezly
6 / 6 / 1
Регистрация: 31.08.2012
Сообщений: 230
18.12.2013, 20:03  [ТС]
Это получено чисто экспериментально=)

Добавлено через 1 минуту
работает и запись и чтение, но там вечные промахи в памяти
0
18.12.2013, 20:08

Не по теме:

Цитата Сообщение от Greeezly Посмотреть сообщение
работает и запись и чтение, но там вечные промахи в памяти
По-вашему, это называется: работает ?

0
5 / 5 / 2
Регистрация: 23.10.2013
Сообщений: 18
18.12.2013, 20:14
outfile.write((char*)&x[i],sizeof(x[i])); outfile.write((char*)&x[i],sizeof(надо имя структуры а не отдельный элемент ));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2013, 20:14
Помогаю со студенческими работами здесь

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

Запись структуры и чтение из файла в структуру ( как бы лучше )
Подкиньте идею как лучше записать структуру в файл и обратно из файла в структуру У меня есть мысль: даны 4 элемента вводим их в...

Ввод данных в структуру из файла
Народ, помогите разобраться. В общем есть структура следующего вида: struct Employees { char Surname; char Name; char...

Чтение данных из файла в структуру
Необходимо считать данные из блокнота, а в последствии работать с ними,написала,но не работает, помогите , пожалуйста. int...

Чтение данных из файла в структуру
Нужно считать данные с блокнота и поработать с ними. программу написала, но подчеркивает mass что не так #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru