使用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;
}
}
例如:其思路可如下描述
定义了较大的二维数组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;
}
}
相关文章推荐
- fstream IO流类的使用:C++读取文件txt,循环逐行输出(转)
- c++使用rapidxml读取cocos2dx的配置文件
- 使用ifstream和getline读取文件内容[c++]
- C++ 使用string一行一行读取文件
- C++ 使用string::getline读取文件内容,sstream::stringstream
- C++读取文件中的汉字,wifstream,wstring的使用
- C++ 使用 fstream 创建输出文件
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- C++简单使用Jsoncpp来读取写入json文件
- 使用 JavaScript读取 xml 文件 --生成 对应的二维数组 问题
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- 使用ifstream和getline读取文件内容[c++]
- C++fstream,ifstream和outstream读取文件最后一行注意