100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用fstream在C++工程中读取文件到二维数组

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

时间:2023-06-12 22:57:50

相关推荐

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

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

例如:其思路可如下描述

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

图1 使用的二维数组

具体实现过程为:

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

如图2红色框部分,该图为VS项目修改字符集的位置。【注意修改成多字节字符集之后,工程中的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;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。