MFC读取.CSV文件

时间:2024-03-14 22:24:22

最近做些小算法,需要将数据导入MFC程序,这里就该方法做简单说明。

其实过程也不是很难,来看第一步:

下面是数据导入函数,具体不多说,看代码解释!

/*************************
*从文件中导入csv数据
**************************/
int LoadFileList(CStringArray &saData, int &nLen)
{
//CByteArray byteArray;
long nFileLength;
CFile file;
CString sFileName, str;
CFileDialog loadFile(TRUE, _T(".csv"), sFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT
, _T("清单逗号文件 (*.csv)|*.csv|All Files (*.*)|*.*|"));

if (loadFile.DoModal() != IDOK)//IDOK 和 IDCANCEL 是指示的常数用户是否选择了"或"取消"按钮
return -2;
sFileName = loadFile.GetPathName();//GetPathName得到完整路径名
if (file.Open(sFileName, CFile::modeRead) == FALSE)//CFile::modeRead打开并读取文件
{
str.Format(_T("导入的清单文件打不开! 可能已被别的编辑器打开了,请关闭后再试!"));
AfxMessageBox(str);
return -1;
}
nFileLength = file.GetLength();//以字节获取文件当前的逻辑长度
//byteArray.SetSize(nFileLength);//设置字节数组大小
unsigned char cTemp;
char buf[256];//定义缓冲区
char dot[4] = ",";
int i = 0;
for (i = 0; i<256; i++)//缓冲区清零
buf[i] = 0;
int nIndex = 0;
int j = 0;
//主要内容
for (i = 0; i<nFileLength; i++)
{
file.Read(&cTemp, 1);//从文件中读取一个字节
//byteArray[i] = cTemp;//把得到的数据给到字节数组
if (cTemp == '\n')//是否读取到了换行符
{
nLen = nIndex;
nIndex = 0;
}
if ((cTemp == ',') || (cTemp == '\n'))//是否读取到了逗号或者换行符,即得到了一个完整数据
{
nIndex++;
CString str;
str = buf;//注意:char数组转换为CString,直接等于即可,将缓冲区的数据传给str
saData.Add(str);//添加到cstring数组
for (j = 0; j<256; j++)
buf[j] = 0;//清空缓冲区
j = 0;
continue;
}
buf[j++] = cTemp;
}
file.Close();
return 0;

};

第二步:数据导入,搞个按键过来

double buf[256] = { 0 };
string recstr = "";
void Cfengsftext11Dlg::OnBnClickedButton1()
{
CStringArray  mydata;
CString str;
int len,i;
LoadFileList(mydata,len);
POSITION L_num = NULL;//接收链表返回值
CUserData* L_Data = NULL;//用于接收链表数据

//提取文件中的数据给链表;CObList  m_inputUserData;
for (int i = 0; i < mydata.GetSize(); i++){
CUserData *aa = new CUserData;
aa->data = _wtof(mydata.GetAt(i));
m_inputUserData.AddTail(aa);
}
L_num = m_inputUserData.GetHeadPosition();//得到链表头
if (L_num == NULL){
return;
}
for (int i = 0; i < mydata.GetSize(); i++) {
L_Data = (CUserData*)m_inputUserData.GetAt(L_num);//根据数字得到末尾链表的指针内容
buf[i] = L_Data->data;
recstr += (to_string(buf[i]) + "\r\n");
m_inputUserData.GetNext(L_num);//得到下一个数据
//m_edit.SetWindowTextW(str);
if (L_num == NULL){
return;
}
}

}

第三步:数据导出,再搞个按键

void Cfengsftext11Dlg::OnBnClickedButton2()
{
CFile fout;
double i;
fout.Open(_T("D:\\receive.txt"), CFile::modeCreate | CFile::modeWrite);
fout.Write(recstr.c_str(), recstr.length());//c_str()函数,获取字符串的首指针
fout.Close();
MessageBox(_T("数据生成成功!在D盘根目录下"));

}

欧了!!!来看结果:

MFC读取.CSV文件

+

MFC读取.CSV文件

+

MFC读取.CSV文件


资源地址:https://download.csdn.net/download/xiaolongwoaini99/10351964