Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
1

Записывание в структуру из файла

10.07.2012, 17:25. Просмотров 384. Ответов 5
Метки нет (Все метки)

Добрый день! У меня проблема с записью из файла bla-bla.txt в структуру.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char d[3]; // Массив символов для пробелов
struct time {
char s[3];
char name[4];
char year[5];
 } m;
FILE *fd;
fd=fopen("bla-bla.txt", "r");
 fread(&m.s,  sizeof(char),2, fd);
  fread(&d,  sizeof(char),1, fd);
 fread(&m.name,  sizeof(char),3, fd);
  fread(&d,  sizeof(char),2, fd);
 fread(&m.year,  sizeof(char),4, fd);
  fread(&d,  sizeof(char),1, fd);
AS G03 2012
Вот к примеру строка. При такой записи,как у меня, выводится , но то лишний символ втиснется, то вообще белиберда... Наверное, я не правильно оперирую памятью. Прошу помощи.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2012, 17:25
Ответы с готовыми решениями:

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

Чтение файла и записывание строк в массив
Собственно есть файл с именем res.txt, в нем содержатся строки 12 11 8 0 Нужно занести в...

Поочередное записывание хексов
есть код на ASM под PIC16f877 где идет передача хексов на ком порт. хексами я должен зажечь...

Записывание данных в input
допустим пишем в <input type='text' id='global'> цыфры. к примеру 249. мне нужно что бы <input...

5
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
10.07.2012, 18:03 2
Ты же вроде не в бинарном открываешь. Так юзай fprintf
0
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
10.07.2012, 18:30  [ТС] 3
Я работаю с интерфейсом, тоесть через поля Edit...
Сейчас не много переделал, и у меня во все предыдущие поля кладется все то, что лежит дальше.
Тоесть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct time {
       char s[6];
       char name[4];
       char lol[3];
       p(){ memset ( s, 0, 6); // зануление памяти под эти переменные
            memset ( name, 0, 4);
            memset ( lol, 0, 3);} } m,k;
       FILE *fp;
       fp=fopen("lol.txt", "r");
       fread(&m.s , sizeof(char), 6, fp);
       fread(&m.name , sizeof(char), 4, fp);
       fread(&m.lol , sizeof(char), 3, fp);
       k=m;
       Edit1->Text=m.s;
       Edit2->Text=m.name;
       Edit3->Text=m.lol;
В файле текст: dases fir vac.
В Edit1 показывает: dases fir vac;
В Edit2 показывает fir vac;
В Edit3 показывает vac;

Как сделать так, что бы в предыдущих не выводилось все последующее?
0
195 / 195 / 78
Регистрация: 10.07.2012
Сообщений: 405
10.07.2012, 21:09 4
нужно чтоб строка заканчивалась нулевым символом
сделать - просто. к примеру, объявить не char s[6], а char s[7]
обнулить все 7 байт, а читать 6 первых
0
9 / 9 / 1
Регистрация: 19.12.2011
Сообщений: 35
10.07.2012, 21:58  [ТС] 5
Цитата Сообщение от Vort_ Посмотреть сообщение
нужно чтоб строка заканчивалась нулевым символом
сделать - просто. к примеру, объявить не char s[6], а char s[7]
обнулить все 7 байт, а читать 6 первых
Если бы такой маневр прошел, я бы не создавал данную тему... Само то задание у меня звучит , что есть файл, в нем n-ое количество записей(строк), нужно вывести один из элементов этой структуры путем поиска с заданным именем и временем...Самая сложная часть распихать эти записи по структуре..., остальное уже готово.

Покрутил не много с размерами символьных массивов - выходит более-менее, но в программу не рационально сувать кучу fread'ов, оэтому надо считать сразу всю структуру сразу тоесть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct time {
       char server[6];
       char name[4];
       char player[4];
       char rank[5];
       p(){ memset ( server, 0, 6);
            memset ( name, 0, 4);
            memset ( player, 0, 4);
            memset ( rank, 0 ,5);} } m;
       FILE *fp;
       fp=fopen("lol.txt", "r");
       fread(&m , sizeof(time), 1, fp);
       Edit1->Text=m.server;
       Edit2->Text=m.name;
       Edit3->Text=m.player;
       Edit4->Text=m.rank;
Вот тут та же совершенно проблема - выводит в поля Edit'тов перевернутой елочкой...
0
195 / 195 / 78
Регистрация: 10.07.2012
Сообщений: 405
11.07.2012, 11:17 6
надо значит делать копии

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// VS2010
#include <string>
#include <iostream>
 
struct A
{
    char s1[4];
    char s2[6];
};
 
void main()
{
    A a;
    memcpy(&a.s1[0], "teststring", sizeof(A));
 
    std::cout << a.s1 << std::endl << a.s2 << std::endl; // получаем фигню
    std::string s1copy(a.s1, sizeof(a.s1));
    std::string s2copy(a.s2, sizeof(a.s2));
    std::cout << std::endl << s1copy.c_str() << std::endl << s2copy.c_str() << std::endl; // так то лучше
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2012, 11:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Записывание в массив нужной строки
Есть текст: V ÊÂ-1 2 423 1 288 VIII Type 59 1 834 1 020 V

Записывание данных в Excel при их изменении
Всем привет, помогите, пжл... Задача такая, есть excel документ, там 2 листа, в обоих разные...

Записывание кода JavaScript в файл *.js через программу на C#
Здравствуйте. Возможна ли реализация такой возможности? Программой создается файл *.js....

Записывание в файл команды с ответом и воспроизведение его
Всем привет, создаю своего (для личного использования) консольного бота, лазив по всемирной помойке...

Как происходит записывание данных с ячеек листа?
Всем привет! Ребята, помогите,плиз,разобраться.. В архиве приложил сам файлик... Вот весь код,...

Разбитие списков и записывание каждого в элемент массива
Разработать скрипт, который будет разбивать список студентов и записывать каждого в элемент...


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

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

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