首先,在你的应用程序中添加一个按钮,用于打开文件对话框。
然后,为按钮添加单击事件处理函数,在函数中添加下面的代码:
void CYourAppDlg::OnBnClickedOpenfile()
{
CFileDialog dlg(TRUE, _T("txt"), _T("*.txt"), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), this)
if (dlg.DoModal() == IDOK)
{
CString path = dlg.GetPathName()
// open the file or do something with the path
}
}
其中,第一个CFileDialog 的构造函数中的参数分别表示:
使用文件打开对话框而不是文件保存对话框
默认文件类型为 txt
默认文件扩展名为 txt
OFN_FILEMUSTEXIST 和 OFN_HIDEREADONLY 这两个标志表示文件必须存在并且隐藏只读文件
第五个参数为文件类型过滤器,该参数表示只显示 .txt 格式的文件。
在 dlg.DoModal() == IDOK 条件成立后,可以使用 dlg.GetPathName() 函数获取选择文件的路径. 然后可以根据需要打开文件或进行其他 *** 作。
注意要在头文件中包含 <afxwin.h>和 <afxdlgs.h>,才能使用CFileDialog.
既然有1位数的数据也有4位数的数据,那么如果txt中没有特意的回车,行数和列数不可能确定。如果有回车的话,简单,用#include <string.h>
char *strtok( char *str1, const char *str2 )
就能解决。
先用getline()一行读出一个str,并累加行数,然后
char *result = NULL
char string[100][100]
int x = 0
result = strtok( str, " ")
while( result != NULL ) {
strcpy(string[x++] , result)
result = strtok( NULL, " " )
}
这样用一个string数组就可以把全部数据保存下来。x记录了总数,然后x除以行数就是列数。
今天有空了,帮你把程序全写出来:
#include<iostream>
#include<string>
#include<fstream>
using namespace std
void main(){
char ch[100] = "\\0"
char b[100][100]
int x=0,y=0
ifstream fin("123.txt",ios::in)
fin.getline(ch,100)
while(!fin.eof()){
++x
cout<<ch<<endl
char *result = NULL
result = strtok(ch,",")
while( result != NULL ) {
strcpy(b[y++],result)
cout<<b[y-1]<<endl
result = strtok( NULL, "," )
}
memset(ch,0,100)
fin.getline(ch,100)
}
fin.close()
}
//已运行过了,没问题,b[100][100]是所有元素,x为行数,y/x为列数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)