我有一个包含超过5000行数据的文本文件(Lotto的抽奖结果)。每行的格式为:number。 day.month.year number1,number2,number3,number4,number5,number6
五个样本行:
我也有:
struct Lotto
{
short number_drawing;
char day;
char month;
short year;
char tab[6];
};
我必须将此文本文件中的数据写入struct Lotto的二进制文件中。
我已经没有想法了。 我已经尝试了几天,但我的程序仍然无法正常工作:(
我尝试加载一行:)
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 :(得分: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;
}