//需求有点不太明确,大概写了一些代码:
//=================================================
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define DESFILENAME "d:\\test.txt" // 文本文件名称
#define MAXROW 800 // 行数
#define MAXCOL 4 // 列数
#define MAXLENGTH 256 // 单行的最长字符数
#define DELIN '\n' // 换行
#define SEPSTR " ,\t" // 列与列之间的分隔符
// 把数字字符串转换成整形数保存
bool parseNum( char * strLine, int nResult[])
{
bool bResult = false;
// 函数调用出错返回
if(strLine == NULL || nResult == NULL)
{
return bResult;
}
char *strToken;
int nCount = 0;
// 把每行的字符串分割开,并转换成整形
strToken = strtok( strLine, SEPSTR );
while( strToken != NULL )
{
// 每行的列数超过指定范围,出错返回
if ( nCount >= MAXCOL)
{
return bResult;
}
// 字符串转换整形
nResult[nCount] = atoi( strToken );
nCount++;
// 取下一串数字
strToken = strtok( NULL, SEPSTR );
}
bResult = true;
return bResult;
}
void main()
{
char strTmp[MAXLENGTH];
int nBuf[MAXROW][MAXCOL] = {0};
int nRow = 0, nCol = 0;
bool bRes;
// 打开文件
ifstream inStream( DESFILENAME,
ios::in||ios::nocreate,
filebuf::sh_read);
if( inStream.fail() )
{
printf( "文件打开失败!\n");
return;
}
do{
// 读取的行数越过了上限(800?),则跳出循环
if ( nRow >= MAXROW )
{
printf( "文件错误! 超出指定行数! 忽略后面的记录!\n");
break;
}
// 把buffer清0,准备下一次读取
memset(strTmp, 0, MAXLENGTH );
// 从文件中读一行文本
inStream.getline( strTmp, MAXLENGTH, DELIN );
// 解析每行文本并转换字符串为整形
bRes = parseNum( strTmp, nBuf[nRow] );
if ( bRes == false )
{
printf( "列项解析错误!\n");
inStream.close();
return;
}
nRow++;
}while( !inStream.eof() ); // 文件没到结尾继续读
// 关闭文件
inStream.close();
// 把读取并转换后的数组内容打印到屏幕
nRow = 0;
while( nRow < MAXROW)
{
for( nCol = 0; nCol < MAXCOL; nCol++ )
{
printf( "%d ", nBuf[nRow][nCol] );
}
printf( "\n" );
nRow++;
}
}
首先,不知道你指定的文件的具体格式,是用什么分隔的,每个数字的位数,这里都是假定的,可以根据你的实际需要修改代码
===============================
d:\\test.txt文件格式类似如下
123213 234324 234 38909 <------空格或TAB分隔的四个数字串
23 4 8 9
324 88 99 88 <----分隔符可以是一个或连续多个
34,,8,,,9 10 <----可以是','逗号分隔
3 8 7 <----可以只有三项
34 78 <----可以只有两项
===============================
输出的效果,大概是:
123213 234324 234 38909
23 4 8 9
324 88 99 88
34 8 9 10
3 8 7 0
34 78 0 0
0 0 0 0
............
================================
修改MAXCOL为8,可以读取福采双色球的历史开奖记录(改MAXROW为20,测试用)
2011124 9 18 19 26 31 32 16
2011125 3 10 15 24 27 32 8
2011126 3 7 13 18 23 26 16
2011127 16 19 22 23 27 29 11
2011128 9 11 14 17 19 23 12
2011129 7 10 11 21 23 26 6
2011130 7 14 18 23 25 32 15
2011131 2 7 9 17 21 25 1
2011132 2 5 12 13 25 33 7
2011133 12 14 20 21 25 31 16
2011134 1 2 6 7 30 31 10
2011135 12 13 17 20 25 26 12
2011136 2 4 6 20 22 31 7
2011137 2 11 18 23 30 33 13
2011138 1 5 15 24 28 32 7
2011139 8 20 24 27 30 31 3
温馨提示:内容为网友见解,仅供参考