Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли попроще записывать в структуру? 
V
    Опции темы
Killer_13
Дата 13.10.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Можно например записывать в структуру из файла как-то попроще? Я имею введу в цыкле или как то по другому.
Мне не нравиться код. Насколько смотрел, то доступ к элементам структуры осуществляется через имя, а через идентификатор нельзя?
Нпример вот так
liste[i]

Код

void Anmeld(void){

    struct Anmeldung liste;

    ifstream csv("anmeldung.csv");

    getline(csv,liste.Nachname,'\n');
    getline(csv,liste.Vorname,'\n');
    getline(csv,liste.Email,'\n');
    getline(csv,liste.Matrikelnummer,'\n');
    getline(csv,liste.Studienrichtung,'\n');
    getline(csv,liste.Semester,'\n');
    getline(csv,liste.G1name,'\n');
    getline(csv,liste.G1vorname,'\n');
    getline(csv,liste.Anmerkung,'\n');
}


Пасиб.
PM MAIL   Вверх
Sartorius
Дата 13.10.2010, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



 Если все поля строки, можешь сделать анонимный union из своей структуры и массива строк
PM MAIL ICQ   Вверх
Killer_13
Дата 13.10.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



понятненько, так и думал, что попроще не будет. smile
PM MAIL   Вверх
azesmcar
Дата 13.10.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Killer_13 @  13.10.2010,  14:26 Найти цитируемый пост)
Нпример вот так
liste[i]

ну конечно же можно smile 
Код

#include <iostream>
#include <string>
#include <functional>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/algorithm/iteration.hpp>
#include <boost/fusion/include/at_c.hpp>

struct Anmeldung
{
    enum
    {
        Nachname,
        Vorname,
        Email,
        Matrikelnummer,
        Studienrichtung,
        Semester,
        G1name,
        G1vorname,
        Anmerkung
    };
    typedef boost::fusion::vector<
        std::string, std::string,
        std::string, std::string,
        std::string, std::string,
        std::string, std::string,
        std::string> type;
};

struct input
{
    template <typename T>
    void operator()(T& r) const
    {
        std::cin >> r;
    }
    void operator()(std::string& r) const
    {
        std::getline(std::cin, r);
    }
};

int main()
{
    Anmeldung::type x;
    boost::fusion::for_each(x, input());
    std::cout << boost::fusion::at_c<Anmeldung::Email>(x) << std::endl;
}



Это сообщение отредактировал(а) azesmcar - 13.10.2010, 15:43
PM   Вверх
mes
Дата 13.10.2010, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Killer_13 @  13.10.2010,  13:34 Найти цитируемый пост)
понятненько, так и думал, что попроще не будет

http://cplusplus.com/reference/iostream/is...operator%3E%3E/


--------------------
PM MAIL WWW   Вверх
Killer_13
Дата 13.10.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Цитата(azesmcar @ 13.10.2010,  15:43)
Цитата(Killer_13 @  13.10.2010,  14:26 Найти цитируемый пост)
Нпример вот так
liste[i]

ну конечно же можно smile 
Код

#include <iostream>
#include <string>
#include <functional>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/algorithm/iteration.hpp>
#include <boost/fusion/include/at_c.hpp>

struct Anmeldung
{
    enum
    {
        Nachname,
        Vorname,
        Email,
        Matrikelnummer,
        Studienrichtung,
        Semester,
        G1name,
        G1vorname,
        Anmerkung
    };
    typedef boost::fusion::vector<
        std::string, std::string,
        std::string, std::string,
        std::string, std::string,
        std::string, std::string,
        std::string> type;
};

struct input
{
    template <typename T>
    void operator()(T& r) const
    {
        std::cin >> r;
    }
    void operator()(std::string& r) const
    {
        std::getline(std::cin, r);
    }
};

int main()
{
    Anmeldung::type x;
    boost::fusion::for_each(x, input());
    std::cout << boost::fusion::at_c<Anmeldung::Email>(x) << std::endl;
}


azesmcar
Дяяяя, я не такой крутой кодер. smile

mes

А подскажите пож, а кукую информацию я должен взять из вашей ссылки на счет структур.

Всем спасибо. smile
PM MAIL   Вверх
mes
Дата 13.10.2010, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Killer_13 @  13.10.2010,  14:52 Найти цитируемый пост)
а кукую информацию я должен взять из вашей ссылки на счет структур.

о том, как удобно использовать оператор >> 
smile
Код

#include <iostream>
#include <fstream>
#include <string>

struct Anmeldung
{
  std::string Nachname;
  std::string Vorname;
  std::string Email;
};

std::istream& operator >> (std::istream& is, Anmeldung& a)
{
    is >> a.Nachname
       >> a.Vorname
       >> a.Email;
    
    return is;
}
int main () {

     std::ifstream csv("anmeldung.csv");
     
     Anmeldung a;
     
     csv >> a;
}





--------------------
PM MAIL WWW   Вверх
Killer_13
Дата 13.10.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Пасиб
PM MAIL   Вверх
SVN74
Дата 13.10.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Вот более примитивный примерчик:
Код

//---------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

struct My
{
    char MyName[30];
    char SheName[25];
    char HeName[60];
    int Num;
};
int main(int argc, char* argv[])
{
    My  m, m2;
        strcpy(m.MyName, "My Name is");
        strcpy(m.SheName, "She Name is");
        strcpy(m.HeName, "He Name is");
        m.Num = 12345;

   HANDLE    MyF = CreateFile("C:\\MyProba.dat",
                             GENERIC_WRITE | GENERIC_READ,
                             NULL,
                             0,
                             OPEN_ALWAYS,
                             FILE_ATTRIBUTE_NORMAL,
                             NULL);
    if(MyF != INVALID_HANDLE_VALUE)
    {
        DWORD T;
        WriteFile(MyF, &m, sizeof(My), &T, NULL);
            SetFilePointer(MyF, 0, NULL, FILE_BEGIN);
        ReadFile(MyF, &m2, sizeof(My), &T, NULL);
        CloseHandle(MyF);

        printf(" 1 = %s\n 2 = %s\n 3 = %s\n 4 = %d\n",
                m2.MyName, m2.SheName, m2.HeName, m2.Num);
    }
    getchar();
    return 0;
}
//---------------------------------------------------------------------------

PM MAIL WWW   Вверх
djamshud
Дата 13.10.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Код

   HANDLE    MyF = CreateFile("C:\\MyProba.dat",
                             GENERIC_WRITE | GENERIC_READ,
                             NULL,
                             0,
                             OPEN_ALWAYS,
                             FILE_ATTRIBUTE_NORMAL,
                             NULL);


Ну и зачем такое извращение в юзерспейсе?

Топикстартеру советую почитать что-нибудь про (де)сериализацию данных.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Killer_13
Дата 13.10.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Грспода, я же в самом начале говорил, что мне нужно только задачку решить, мне не нужно очень глубоко в с++ лезть. smile

Это сообщение отредактировал(а) Killer_13 - 13.10.2010, 20:52
PM MAIL   Вверх
Sartorius
Дата 13.10.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 2
Всего: 37



 smile 
Цитата(djamshud @  13.10.2010,  21:48 Найти цитируемый пост)
Ну и зачем такое извращение в юзерспейсе?

А причем здесь userspace? Насколько я знаю, в ring0 совсем другие функции для работы с ФС используются. Я, кстати, в последнее время тоже стараюсь реже использовать обретки из stdio...
PM MAIL ICQ   Вверх
djamshud
Дата 13.10.2010, 23:44 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Оффтопик, так оффтопик.

Я могу понять использование этой десятиэтажной каракатицы в драйвере. Могу понять, если нужно как-то изощренно открыть файл (судя по всему те стопицот передаваемых параметров именно изощренности и служат) или чтобы получить идентификатор для дальнейших изощрений. Я могу понять, почему не пользоваться плюсовыми стримами. Но я не могу понять, зачем такой абракадаброй просто, черт возьми, сбрасывать данные в файл.

Право, я не в курсе, можно ли использовать это в драйвере, или для тех случаев существуют другие каракатицы. Я просто имел в виду решение прикладной задачи - не так выразился.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Dov
Дата 14.10.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(Killer_13 @  13.10.2010,  13:26 Найти цитируемый пост)
Можно например записывать в структуру из файла как-то попроще?


fread


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
SVN74
Дата 14.10.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(djamshud @  13.10.2010,  23:44 Найти цитируемый пост)
Я могу понять использование этой десятиэтажной каракатицы в драйвере. Могу понять, если нужно как-то изощренно открыть файл (судя по всему те стопицот передаваемых параметров именно изощренности и служат) или чтобы получить идентификатор для дальнейших изощрений. Я могу понять, почему не пользоваться плюсовыми стримами. Но я не могу понять, зачем такой абракадаброй просто, черт возьми, сбрасывать данные в файл.

Для Windows приложений рекомендуется использовать CreateFile, по причине более безопасных доступов к файловой системе.
PM MAIL WWW   Вверх
bsa
Дата 14.10.2010, 21:06 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(SVN74 @  14.10.2010,  21:06 Найти цитируемый пост)
Для Windows приложений рекомендуется использовать CreateFile, по причине более безопасных доступов к файловой системе. 
И что это значит? Тебе это часто нужно? Ты считаешь, что прикладная пользовательская программа обязательно должна так открывать файлы, чтобы другие не могли их даже читать? Бред.
PM   Вверх
xvr
Дата 15.10.2010, 08:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(SVN74 @ 14.10.2010,  20:06)
Для Windows приложений рекомендуется использовать CreateFile, по причине более безопасных доступов к файловой системе.

Можно подумать, что fopen не использует CreateFile, а напрямую потрошит диски?  smile Или вы считаете, что сможете использовать CreateFile более безопасным способом, чем разработчики CRT в компиляторах?

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1359 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.