Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Структуры и работа с ними (https://forum.antichat.xyz/showthread.php?t=62560)

ph0en1x 23.02.2008 21:51

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

zythar 23.02.2008 21:54

write(дескриптор_файла, &структура, sizeof структура)
read(дескриптор_файла, &структура, sizeof структура)

вроде так.

Delimiter 24.02.2008 15:52

Цитата:

Сообщение от zythar
write(дескриптор_файла, &структура, sizeof структура)
read(дескриптор_файла, &структура, sizeof структура)

вроде так.

CFile f;
CFileException e;

struct mt
{
....
....
} mtu;

f.write((char *)&mtu,sizeof(mt));

f.read((char *)&mtu,sizeof(mt));

Edited: Пива было много.... поэтому чипатал левой ногом.

_Great_ 24.02.2008 15:56

давайте щас еще понтоваться кто как умееть писать в файл +)
пусть автор уточнит как он производит запись. но абстрактно это можно выразить так, как сказал zythar

это раз.. два: Delimiter, как ты собрался брать АДРЕС СТРУКТУРЫ? Поясни-ка поподробнее..

ph0en1x 24.02.2008 16:26

Цитата:

Сообщение от _Great_
давайте щас еще понтоваться кто как умееть писать в файл +)
пусть автор уточнит как он производит запись. но абстрактно это можно выразить так, как сказал zythar

это раз.. два: Delimiter, как ты собрался брать АДРЕС СТРУКТУРЫ? Поясни-ка поподробнее..

я сам толком не знаю как я произвожу запись :confused:
вобщем ситуация следующяя:
У меня есть структура
Код:

struct MYSTRUCTURE {
          char city[20];
          char otp[5];
          int number;
          char time[5];
          int mest;
          };

Мне нада ввести с терминала данные в елементы структуры и записать всё это безобразие в файл, таким образом чтоб я мог потом его
открыть и произвести поиск по елементам city и otp, запрос для поиска тоже должен вводится с клавиатуры.
Количество записей в файле должно быть произвольное. И желательно это всё запихнуть в одну программу т.е. сначала вводим эти записи потом какойнибудь стоп символ вводится, данные записываются, потом читаются и работа с поиском.

zythar 24.02.2008 17:33

ну хз.. структуру объявил, потом объяви переменную типа структуры:
struct MYSTRUCTURE foo;

присвой элементам структуры значения сам, в исходном файле, потом открой файл, и записивай в него или так как я сказал или как delimiter.
если все хорошо пойдет то тогда уже вводи значения елементов структуры из терминала.

nc.STRIEM 24.02.2008 18:31

сохраняй каждый элемент структуры с новой строки и все...

ph0en1x 24.02.2008 18:46

Цитата:

Сообщение от nc.STRIEM
сохраняй каждый элемент структуры с новой строки и все...

хм и что это получится если записей будет много?

Вот так получилось, но не знаю можно ли так:
Код:

#include <iostream.h>
#include <string.h>
#include <stdio.h>
struct MYSTRUCTURE {
        char city[20];
        char otp[5];
        int number;
        char r[5];
        int mest;
        };

main() {
    MYSTRUCTURE MyStructure;
        strcpy(MyStructure.city, "Moscov" );
        strcpy(MyStructure.otp, "10:25");
        strcpy(MyStructure.r, "16:25");
        MyStructure.mest = 20;
        MyStructure.number =1112;
        freopen("aeroflot.txt", "rt", stdout);
        cout << "|";
        cout << MyStructure.number;
        cout << "|";
        cout << MyStructure.city;
        cout << "|";
        cout << MyStructure.otp;
        cout << "|";
        cout << MyStructure.r;
        cout << "|";
        cout << MyStructure.mest;
        cout << "|" << endl;
        return 0;
        }

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

nc.STRIEM 24.02.2008 19:12

все норм получиться, каждый элемент с новой строки, и так любое кол-во. Загружать также. Все элементарно

ph0en1x 24.02.2008 19:55

Код:

#include <iostream.h>
#include <fstream.h>
struct MYSTRUCT {
        char city[20];
        char otp[5];
        int number;
        char r[5];
        int mest;
        };
int main(void){
    int i;
    struct MYSTRUCT s[200];
    ofstream mystream_out("aeroflot.txt", ios::in|ios::out);
    if (!mystream_out)
    {
    cout << "Cannot open file.\n";
    return 1;
    }
    else{
for(i=1; i<=2; i++){
    cout<< "\nZapus" <<("%2.d",i);
    cout<< ("\nCity"); cin >> s[i].city;
    }
    mystream_out.write((char*)s, sizeof(s));
    mystream_out<< &s <<endl;
    mystream_out.close();
    }
return 0;
}

чуствую что гдето ошибся ибо открыв файл получаю вместо двух слов много сиволов разных.
Это так и должно быть или я всётаки ошибся?


Время: 01:24