MFC打开txt文件并读取二维不等列数组
来源:互联网 发布:成都软件行业协会名录 编辑:程序博客网 时间:2024/05/27 12:22
一、打开txt文件并读取
1.创建基于对话框的MFC项目,选择基于对话框类型
2.在资源视图的Dlg中删除原有控件。添加一个按钮和两个编辑框。
3.void CReadTextFileDlg::OnBnClickedButton1()
{
CFileDialog fDlg(TRUE, _TEXT("txt"), NULL, 4|2,
_TEXT("文本文件(*.txt,*.ini,*.log)|*.txt;*.ini;*.log|全部文件(*.*)|*.*||"));
// 调用 DoModal() 方法来打开对话框
if (fDlg.DoModal() == IDOK)
{
// 设置编辑框1的内容为选择文件的路径
// GetPathName() --> 返回选定文件的完整路径
SetDlgItemText(IDC_EDIT1,fDlg.GetPathName());
//将文件路径写入编辑框
CFile fFile(fDlg.GetPathName(),CFile::modeRead);
//打开文件路径下的文件,并采用只读模式
// 因为在Windows下常用的文本保存编码为ANSI
// 而本工程在当初选择的时候选择了Unicode环境
// 所以需要使用CStringA类型的变量。
CStringA strFile ;
// 读取打开文件内容
// 第一个参数:读取内容的缓冲区域
// 第二个参数:读取内容的长度 fFile.Read(strFile.GetBufferSetLength(fFile.GetLength()),fFile.GetLength());
// 关闭文件句柄
fFile.Close();
// 释放缓冲区域
strFile.ReleaseBuffer();
// 因环境为Unicdoe的原因,CStringA不可以直接显示到界面控件上
// 所以使用CString转换为Unicdoe字符
SetDlgItemText(IDC_EDIT2,CString(strFile));
}
}
二、读取txt二维不等列数组
2.1基于第一部分的准备工作
2.1.1 在上述工程中加入以下变量:
char * cwd,用于获得文件路径
添加以下函数方法:
bool getTxtData(float** b, const int maxrow, const int maxcol, char* cwd)
const int getMaxRow(char* cwd)
2.1.2
在cpp中加入头文件
#include <stdlib.h>#include <iostream>#include <fstream>#include <string>#include <sstream>
并在程序开头加入以下声明
bool getTxtData(float** b, const int maxrow, const int maxcol, char* cwd);int const getMaxRow(char* cwd);using namespace std;
2.1.3
在void C打开文件Dlg::OnBnClickedButton1()中的if (fDlg.DoModal() == IDOK) 中的最后加入以下行数
因为GetPathName返回值类型是CString,所以要转为char型才可以使用。
int len = WideCharToMultiByte(CP_ACP, 0, fDlg.GetPathName(), -1, NULL, 0, NULL, NULL);// Unicode编码模式 CString-->char * cwd = new char[len + 1]; WideCharToMultiByte(CP_ACP, 0, fDlg.GetPathName(), -1, cwd, len, NULL, NULL);
2.2 在各个函数中添加以下对应代码
2.2.1
//此函数返回值为number,为txt文件中的总行数
const int getMaxRow(char* cwd) { ifstream txtFile(cwd);//从当前文件地址中输入文件流到txrFile中 if (!txtFile.is_open())//用来检查文件是否被打开:is_open方法。成功打开,其值为1 { cout << "Error opening file"; exit(1);//退出该函数 } string buffer; //访问字符操作string可以按数组方式,以下标来访问。还可以用at()函数访问指定的字符 int number = 0; while (!txtFile.eof())//eof函数 ,它是ifstream 从类 ios 中继承过来的,当到达文件末尾时返回true 。(end of file) { getline(txtFile, buffer);//这里的getline通过和eof一起作用,作为一个最大行数的终止条件。即读到最后一行时,循坏结束。 //(getline是从txtFile里面得到一行字符并输入到buffer中) number++; } return number;//若txt文档中最后一行为空行,则返回值为当前读取到的行数减一}
2.2.2
//读取文本中的二维数组到程序的二维数组中并以数值形式保存
bool getTxtData(float** b, const int maxrow, const int maxcol, char* cwd){ //读取文本中的二维数组 ifstream txtFile(cwd);////以输入方式打开文件,格式为ifstream file("地址")。这里实际上定义了对象txtFile if (!txtFile)return false; string buffer; //访问字符操作string可以按数组方式,以下标来访问。还可以用at()函数访问指定的字符 for (int i = 0; i<maxrow; i++){ getline(txtFile, buffer); //结合for将txtFile中的每一行读入到buffer中 istringstream is(buffer);//从对象buffer中读取字符到对象is中 for (int j = 0; j<maxcol; j++){ is >> b[i][j]; //将is中的数值逐个赋予到b的元素中。 //对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。 //每赋值一次,焦点跳到下一个分隔符的后面。 } } return true;}
2.2.3 在需要应用到该二维数组的程序函数中的开头部分加入以下函数
const int maxrow = getMaxRow(cwd);//实现对矩阵的各行取最大值,对角线取最大值,并用函数返回指针值 const int maxcol = 6; //定义文件中最大列数//动态数组除了可以用到时才创建,还可以用变量来动态定义元素的个数,如下面的maxrow、maxcol float** b = new float*[maxrow]; //对于生成二维及更高维的数组,应使用多维指针。 //以二维指针为例 //int **p=new int* [row]; //row是二维数组的行,*p是指向一个指针数组[row]的指针 //for(int i=0; i<row; i++) //p[i]=new int [col]; //col是二维数组的列,p是指向一个int数组[col]的指针 for (int i = 0; i<maxrow; i++){ b[i] = new float[maxcol]; } for (int i = 0; i < maxrow; i++){ //这个for语句是用new申请完数组加的一段初始化,若无,则无数据的数组元素位会显示乱码 for (int j = 0; j < maxcol; j++) b[i][j] = 0; } if (getTxtData(b, maxrow, maxcol, cwd)){//getTxtData函数赋值给b了,b是float**型的是float*的指针,传指针就可以直接在内存上读写//这个If语句中的内容可以不写,这里写是为了在Win32的控制台中显示,以证明成功读取。 /*for (int i = 0; i<maxrow; i++){ for (int j = 0; j<maxcol; j++) cout << b[i][j] << " "; cout << "\n"; }*/ //这里先将其注释掉 }
接着就可以使用装载着txt文件中二位数据的b数组了。(若没有第一部分提供cwd,可手动定义文件路径)
- MFC打开txt文件并读取二维不等列数组
- CfileDialog 文件对话框 mfc打开并读取txt文件
- vc打开并读取txt文件
- web工程中读取txt文件中二维数组并在页面显示
- php的读取txt文件转换成二维数组
- 从txt文件中读取数据到二维数组
- C++从txt文件中读取二维的数组
- PHP读取txt文件的内容并赋值给数组
- qt 读取txt文件内容并保存到数组中
- VC++读取文件内容并将其存入二维数组
- Android/Java 读取txt,转二维数组
- 不等长的二维数组
- 不等规模二维数组相乘
- c语言 创建动态二维数组 读取txt文件到数组
- matlab将二维数组写入txt文件
- C++把txt文件读到二维数组
- PHP 读取与写入txt文件并并赋值给数组
- 打开一个txt文件,读取里面的内容并打印出来
- Mysql系列一:初识Mysql
- web前端task0001
- android 布局preview 技巧
- Android开发——Intent调用系统组件21个常用小示例
- hadoop2.7.3 HA高可用集群安装
- MFC打开txt文件并读取二维不等列数组
- Atitit 图像处理类库大总结attilax qc20
- 【前端攻城狮之路】JavaScript函数的apply方法与call方法浅析
- Servlet基础
- 堆和栈的区别
- 数据库笔记—绪论2
- Django 安装
- Apache2.4.7配置https
- servlet