VCMFC 中 如何读取txt文件中的数字,并存放在二维数组里

VCMFC 中 如何读取txt文件中的数字,并存放在二维数组里,第1张

使用fopen函数打开文本文件,在使用fscanf函数的%d参数分别读入数字即可。

1fopen的函数原型:FILE fopen(const char path,const char mode);

  fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:

r 以只读方式打开文件,该文件必须存在

r+ 以可读写方式打开文件,该文件必须存在。

rb+ 读写打开一个二进制文件,允许读数据。

rw+ 读写打开一个文本文件,允许读和写。

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

wb 只写打开或新建一个二进制文件;只允许写数据。

wb+ 读写打开或建立一个二进制文件,允许读和写。

wt+ 读写打开或着建立一个文本文件;允许读写。

at+ 读写打开一个文本文件,允许读或在文本末追加数据。

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

    返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

2例程:

#include<stdioh>

#define F_PATH "d:\\myfile\\filedat"

int i=0,s[1000];

int main(){

    FILEfp=NULL;//需要注意

    fp=fopen(F_PATH,"r");

    if(NULL==fp) return -1;//要返回错误代码

    while(fscanf(fp,"%d",s+i)!=EOF) printf("%d ",s[i++]); //从文本中读入数字并在控制台打印出来

    fclose(fp);

    fp=NULL;//需要指向空,否则会指向原打开文件地址    

    return 0;

}

使用fopen函数打开文本文件,在使用fscanf函数的%d参数分别读入数字即可。

1fopen的函数原型:file

fopen(const

char

path,const

char

mode);

fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:

r

以只读方式打开文件,该文件必须存在。

r+

以可读写方式打开文件,该文件必须存在。

rb+

读写打开一个二进制文件,允许读数据。

rw+

读写打开一个文本文件,允许读和写。

w

打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

w+

打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a

以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(eof符保留)

a+

以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

(原来的eof符不保留)

wb

只写打开或新建一个二进制文件;只允许写数据。

wb+

读写打开或建立一个二进制文件,允许读和写。

wt+

读写打开或着建立一个文本文件;允许读写。

at+

读写打开一个文本文件,允许读或在文本末追加数据。

ab+

读写打开一个二进制文件,允许读或在文件末追加数据。

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b

字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。

返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回null,并把错误代码存在errno中。

2例程:

#include

#define f_path "d:\\myfile\\filedat"

int i=0,s[1000];

int main(){

filefp=null;//需要注意

fp=fopen(f_path,"r");

if(null==fp) return -1;//要返回错误代码

while(fscanf(fp,"%d",s+i)!=eof) printf("%d ",s[i++]); //从文本中读入数字并在控制台打印出来

fclose(fp);

fp=null;//需要指向空,否则会指向原打开文件地址

return 0;

}

CStdioFile file;

CString ReadFileString;

if (!fileOpen(_T("capitaltxt"),CFile::modeRead)){return;}

while (fileReadString(ReadFileString)){

DWORD m_start = 0;

int m_offset = 0;

TCHAR m_charFind = '\t'; //查找\t分割符

int m_charNum = 0;

while (m_start <= ReadFileStringGetLength())

{

m_offset = ReadFileStringFind(m_charFind,m_start); //搜索偏移量

if (-1 != m_offset)

{

m_charNum = m_offset - m_start;

;//存储到不同对象

m_start = m_offset + 1;

}

else

{

m_charNum = strRowDataGetLength() - m_start;

;//存储最后一段值

break;

}

}

}

fileclose();

里面的存储代码很简单,就是判断长度,截取代码。

我写了一个。

界面一个文本框两个按钮,文本框关联一个CString型变量m_Data,设置属性为Vertical scroll和Want return。

两个按钮对应的读写函数分别如下

void CFileTxtDlg::OnRead()

{

// TODO: Add your control notification handler code here

CFileDialog fDlg(TRUE);

fDlgm_ofnlpstrFilter = "Text Files(txt)\0txt\0\0";

if(fDlgDoModal() == IDOK)

{

CStdioFile stdFile;

stdFileOpen(fDlgGetPathName(), CFile::modeRead | CFile::typeBinary);

DWORD fileLen = stdFileGetLength();

char pBuf = new char[fileLen + 1];

pBuf[fileLen] = 0;

stdFileRead(pBuf, fileLen);

UpdateData();

m_Data = pBuf;

UpdateData(FALSE);

delete pBuf;

stdFileClose();

}

}

void CFileTxtDlg::OnWrite()

{

// TODO: Add your control notification handler code here

UpdateData();

CFileDialog fDlg(FALSE);

fDlgm_ofnlpstrFilter = "Text Files(txt)\0txt\0\0";

fDlgm_ofnlpstrDefExt = "txt";

if(IDOK == fDlgDoModal())

{

CStdioFile stdFile;

stdFileOpen(fDlgGetPathName(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);

stdFileWriteString(m_Data);

stdFileClose();

}

}

如要源代码发消息

保存到excel中比较麻烦,excel还得有驱动(我在网上下载了个封装好的excelh

excelcpp

直接用的,搜了几句代码,功能实现了,不过我没看懂什么意思)。

我一般直接保存到txt中,这个最简单了。

我把数据放到cstring

变量中,然后写入txt的。

1

我把写入txt的函数封装到了

工程cpp

中了。假设为void

addtotxt(cstring

var)

2

在读取此函数的对话框中,extern

c工程名app

theapp;

3

放入数据到txt中

theappaddtotxt(strtemp);

4工程cpp

中的函数体。

cstring

crenamefileapp::getexepath(void)

{

char

szfilepath[max_path

+

1]={0};

getmodulefilenamea(null,

szfilepath,

max_path);//1111

(strrchr(szfilepath,

'\\')+1)[0]

=

0;

//

删除文件名,只获得路径字串

cstring

path

=

szfilepath;

return

path;

}

void

crenamefileapp::addtotxt(cstring

strtemp)

{

cstring

h_path;

h_path=getexepath();

h_path=

h_path+"文件名核对txt";

cfile

file;

if(!fileopen(_t(h_path),cfile::modereadwrite|

cfile::typebinary))

{

fileopen(_t(h_path),cfile::modecreate|cfile::modereadwrite|

cfile::typebinary);

}

fileseektoend();

filewrite(strtemp,strtempgetlength());

fileclose();

}

MFC主要读写文件的类是CFile,而CStdioFile类是派生自CFile类的,主要增加了一个按行的方式读取/写入文件每行字符串的功能

读写TXT文件,写入和输出必须统一格式

CStdioFile myFile, File;

if(myFileOpen(CBApp::getCurrModulePath()+_T("filenametxt"), CFile::modeRead))

{

//读取

myFileReadString(str);

myFileClose();

}

else

{

//创建

FileOpen(CBApp::getCurrModulePath()+_T("filenametxt"), CFile::modeWrite | CFile::modeCreate);

FileWriteString(sFileName);

FileClose();

}

//写入

FileOpen(CBApp::getCurrModulePath()+_T("filenametxt"), CFile::modeWrite );

FileWriteString(sFileName);

FileClose();

FILE fHexFile;

fHexFile = fopen(cstrFilePath, "rb");

DWORD result = fread (&b,sizeof(byte ),1,fHexFile);

以上就是关于VC/MFC 中 如何读取txt文件中的数字,并存放在二维数组里全部的内容,包括:VC/MFC 中 如何读取txt文件中的数字,并存放在二维数组里、mfc读取文件内容并保存到二维数组中、mfc程序读取txt文件后如何 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9707008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存