您的位置:首页 > 编程语言 > C语言/C++

使用fstream在C++工程中读取文件到二维数组

2013-01-06 11:12 316 查看
首先为类CCalculateCenterDlg定义一个较大的二维数组成员m_DataArry[100][100],实际读取数据中存放在该数组中,但是肯定用不完该数组的所有空间,实际使用的数组长度和宽度被保存在该类的成员变量m_iHeight 和 m_iWidth中。

例如:其思路可如下描述

定义了较大的二维数组10行9列,但是实际使用时可能只使用了6行3列,到时候引用时只要使用实际的行列数6和3而不是数组本身的行列数10和9就可以了,如下图1所示



图1 使用的二维数组

具体实现过程为:

1、修改项目的工程为多字节字符集

如图2红色框部分,该图为VS2005项目修改字符集的位置。【注意修改成多字节字符集之后,工程中的CString,char等字符转换时就不能使用中文了】



图2、修改文件的工程为多字节字符集

2、定义文件流对象

文件名字存储在对象CString csFileName中,每读取一行将进行解析并将改行数据存入数组中,的然后将数组的行数加1;

bool CCalculateCenterDlg::GetDataFromFile(CString csFileName)
{
fstream file(csFileName.GetBuffer());//注意输入文件名字及其路径中不能有汉字
if (!file)
return false;
char LineBuf[LINE_LENGTH];
m_iHeight = m_iWidth = 0;
bool bFindNewCol = false;
int iWidPos =0;
string sLineContent;
while(file.getline(LineBuf,LINE_LENGTH))
{
sLineContent = LineBuf;
ParseInputData(sLineContent);
++m_iHeight;
}
file.close();
return true;

}

注意:

(1)输入文件名字及其路径中不能有汉字

(2)二维数组m_DataArry[100][100]是CCalculateCenterDlg的成员变量:int m_DataArry[100][100];

(3)变量m_iHeight 和 m_iWidth 是CCalculateCenterDlg的成员变量;用于标识已经使用的数组长度和宽度

(4)CCalculateCenterDlg的成员函数ParseInputData主要用于处理读取的每一行数据,定义形式为:

bool ParseInputData(string sLineInfo);

3、解析每一行读取的数据到数组中:

voidCCalculateCenterDlg::ParseInputData(string sLineInfo)

{
int iWidth =0, iCurPos = 0, iInsertPos =0;
char DataUnit[8], curChar;
bool bFindData = false;
memset(DataUnit,0,8);
while(iCurPos<sLineInfo.length())
{
curChar = sLineInfo[iCurPos];
if (curChar != ' ' && curChar != ''&& curChar != '\n')
{
bFindData = true;
DataUnit[iInsertPos++] = curChar;
}
if (bFindData && (curChar == ' ' || curChar == '' || curChar == '\n'))
{
bFindData = false;
m_DataArry[m_iHeight][iWidth++] = atoi(DataUnit);
iInsertPos =0;
memset(DataUnit,0,8);
}
++iCurPos;
}
if (iWidth>m_iWidth)
{
m_iWidth = iWidth;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: