2016-03-25 3 views
-2

У меня есть текстовый файл, содержащий более 5000 строк с данными (результаты лотереи для лотереи). Каждая строка имеет вид: номер. day.month.year number1, number2, number3, number4, number5, number6C++ чтение файла в структуру и запись двоичного файла

Пять образцов линии:

  1. 27.01.1957 8,12,31,39,43,45
  2. 03.02.1957 5,10,11,22,25,27
  3. 10.02.1957 18,19,20,26,45,49
  4. 17.02.1957 2,11,14,37,40,45
  5. 24,02. 1957 8,10,15,35,39,49

Я также:

struct Lotto 
{ 
    short number_drawing; 
    char day; 
    char month; 
    short year; 
    char tab[6]; 
}; 

Я должен записать данные из этого текстового файла в двоичный файл в качестве структуры лото.

У меня уже есть идеи. Я beeng пытается так несколько дней, но моя программа по-прежнему не работает должным образом :(

я пытаюсь загрузить хотя одну строку :)

int main() 
{ 
    ifstream text("lotto.txt", ios::in); 
    ofstream bin("lottoBin.txt", ios::binary | ios::out); 
    Lotto zm; 
    short number_drawing; 
    char day; 
    char month; 
    short year; 
    char tab[6]; 
    char ch; 
    int records = 0; 
    while (!text.eof()) 
    { 
     text >> zm.number_drawing >> ch >> zm.day >> ch >> zm.month >> 
ch >> zm.year >> zm.tab[0] >> ch >> zm.tab[1] >> ch >> zm.tab[2] >> 
ch >> zm.tab[3] >> ch >> zm.tab[4] >> ch >> zm.tab[5]; 
     records++; 
    } 
    cout << "All records: " << records << endl; 
+0

показать нам вашу программу – IceFire

+0

_ "двоичный файл как struct Lotto" _ Lotto - это структура. Кто его определил? Вы или ваш учитель? – ZDF

+0

Мой учитель определил это. – Kementari

ответ

0

Вот некоторые наблюдения, которые могут помочь вам:

  • Вы не сможете прямо прочитать номер в char. Используйте промежуточное целое число.

  • Определяем функцию для чтения записи: bool read(std::istream&, Lotto&)

  • Ваш while должен вызвать вышеуказанную функцию: while (read(is, lotto))

Отправной точкой:

bool read(std::istream& is, Lotto& lotto) 
{ 
    short t; 
    char c; 

    // read data 

    // 
    is >> t; 
    lotto.number_drawing = t; 
    is >> c; 
    if (c != '.') 
    return false; 

    // 
    is >> t; 
    lotto.day = char(t); 
    is >> c; 
    if (c != '.') 
    return false; 

    // read rest of fields... 

    // end of line 
    while (is.get(c) && isspace(c) && c != '\n') 
    ; 
    if (! is.eof() && c != '\n') 
    return false; 


    // check data 
    if (lotto.month > 12) 
    return false; 

    // check rest of data... 

    return is.good(); 
} 


int main() 
{ 
    ifstream is("yourfile.txt"); 
    if (! is) 
    return -1; 

    Lotto lotto; 
    while (read(is, lotto)) 
    { 
    // ... 
    } 
    if (!is.eof()) 
    return -1; 


    return 0; 
} 
Смежные вопросы