如何将串口接收的数据实时在保存在txt文件?

gan0326 2013-04-17 11:16:52
用MScomm控件读取到光功率计的字符串,转换成双精度的数据实时显示在编辑框中,现在我想保存实时显示的数据在TXT或excel文件中,哪位大神能告诉我该怎么做吗?我是新手
...全文
10445 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicemia 2015-11-26
  • 打赏
  • 举报
回复
wuwoliu 2015-07-12
  • 打赏
  • 举报
回复
读一次串口,打开txt写入一次,每次写入结尾加换行,这样txt以后导入数据库也方便。
阿源是少年 2015-07-07
  • 打赏
  • 举报
回复
文件名这种格式,你可以自己修改: log20150707.txt log20150708.txt log20150709.txt
阿源是少年 2015-07-07
  • 打赏
  • 举报
回复
给你干货:
/**
* Logging.
*
* @param lpszFileDir - 日志文件保存目录,如D:, D:\\test, D:\\log等
* @param lpszContent - 要写入当天日志文件的内容.
* @return void.
* @remark 
* 这个函数是根据当前系统日期生成指定格式文件名的txt文件,只要日期不变,文件名
* 就是一样的,所以当天的日志全部写入当天对应文件名的文件,第二天日期一变,文件名就
* 跟着变了,就会创建新文件,文件名对应当天日期.
*/
void Log(LPCTSTR lpszFileDir, LPCTSTR lpszContent)
{
	CTime tm = CTime::GetCurrentTime();
	CString strFileName;
	strFileName.Format(_T("log%04d%02d%02d.txt"), tm.GetYear(), tm.GetMonth(), tm.GetDay());

	CString strFilePath;
	strFilePath +=  lpszFileDir;
	strFilePath += _T("\\");
	strFilePath += strFileName;
	CStdioFile file;
	if(file.Open(strFilePath, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
		file.SeekToEnd();
		file.WriteString(lpszContent);
		file.WriteString(_T("\n"));
		file.Close();
	}
}
halswls 2015-07-07
  • 打赏
  • 举报
回复
引用 3 楼 shen_wei 的回复:
FILE *pFile = fopen("c:\\data.txt","a"); fseek( pFile, 0, SEEK_END); //每次都移动到文件结尾在写入 fwrite(data,1, strlen(data), pFile); fclose(pFile);
请教您一下,如果我想把第一天收到的数据保存成一个文件,第二天收到的保存成第二个文件应该怎么写呢。。然后以此类推呢?谢谢!!
Angelia_cfq 2014-04-05
  • 打赏
  • 举报
回复
我也实现不了,求帮助呀
wilia 2013-11-19
  • 打赏
  • 举报
回复
引用 11 楼 hannibaychty 的回复:
大神给出的“经典的串口接收数据的例子”确实很好,开始我就几个疑问,mydata和temp都是什么?前面没有声明啊!
引用
[quote=引用 4 楼 rxguoblp 的回复:] 经典的串口接收数据的例子如下: 1.在头文件中声明存储数据的数组和记录数据的文件地址 BYTE rxdata[4096]; //设置BYTE数组 An 8-bit integerthat is not signed. CFile m_file(_T("data.txt"),CFile::modeCreate|CFile::modeWrite); 2.写MScomm232的接收事件(记得接收事件的ID应该是2吧)
void COperation::OnCommMscomm1()//串口接收数据并处理 { int nEvent=m_Comm.get_CommEvent();//得到事件 switch(nEvent) { case 2://接收数据事件 { VARIANT variant_inp; COleSafeArray safearray_inp; long len,k; //-------------接收数据并进行处理---------------// k=m_Comm.get_InBufferCount();//接收缓冲区字符数 if(k>0) { variant_inp=m_Comm.get_Input(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组,存入rxdata } //-------------写入文本文件---------------// for (int j=0;j<len;j++) { temp.Format(_T("%0x"),rxdata[j]); mydata += temp; mydata += " ";//隔开两个位置; } mydata += "\r\n"; m_file.Write(mydata,mydata.GetLength());//写到文件中 mydata = "";//清空 } default: break; } }
[/quote] 上面的代码会不会造成此次的写入数据把原来保存的数据刷新了??
xiaohuli1 2013-10-24
  • 打赏
  • 举报
回复
我按照上面的方法在头文件中加入 #include "afx.h" #include <string> using namespace std; 也加入了CFile m_file(_T("data.txt"),CFile::modeCreate|CFile::modeWrite); 编译的时候出现了下面的错误 Compiling... sendcomDlg.cpp d:\my documents\vc6\sendcom\sendcomdlg.h(26) : error C2059: syntax error : 'string' 这是为什么啊,有谁遇到过吗
sqf0119 2013-09-09
  • 打赏
  • 举报
回复
谢谢!学习了
  • 打赏
  • 举报
回复
给出没有说明的部分代码,就是耍流氓!
  • 打赏
  • 举报
回复
大神给出的“经典的串口接收数据的例子”确实很好,开始我就几个疑问,mydata和temp都是什么?前面没有声明啊!
引用
引用 4 楼 rxguoblp 的回复:
经典的串口接收数据的例子如下: 1.在头文件中声明存储数据的数组和记录数据的文件地址 BYTE rxdata[4096]; //设置BYTE数组 An 8-bit integerthat is not signed. CFile m_file(_T("data.txt"),CFile::modeCreate|CFile::modeWrite); 2.写MScomm232的接收事件(记得接收事件的ID应该是2吧)
void COperation::OnCommMscomm1()//串口接收数据并处理 { int nEvent=m_Comm.get_CommEvent();//得到事件 switch(nEvent) { case 2://接收数据事件 { VARIANT variant_inp; COleSafeArray safearray_inp; long len,k; //-------------接收数据并进行处理---------------// k=m_Comm.get_InBufferCount();//接收缓冲区字符数 if(k>0) { variant_inp=m_Comm.get_Input(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组,存入rxdata } //-------------写入文本文件---------------// for (int j=0;j<len;j++) { temp.Format(_T("%0x"),rxdata[j]); mydata += temp; mydata += " ";//隔开两个位置; } mydata += "\r\n"; m_file.Write(mydata,mydata.GetLength());//写到文件中 mydata = "";//清空 } default: break; } }
Jamespass 2013-04-19
  • 打赏
  • 举报
回复
現在有一顆IC能同時連接電腦和安卓的, 是USB轉串口的, FT231X
淡定的飘着 2013-04-19
  • 打赏
  • 举报
回复
楼上的大虾们都写的很详细,可以用了吗?
看不见的裂痕 2013-04-19
  • 打赏
  • 举报
回复
上段代码,楼主就懂

CString cstrSaveFilePath;
		cstrSaveFilePath = m_cstrSaveOBpath + _T("\\HotPoint_") + cstrViewName +_T(".txt");
		if(!saveHotFile.Open(cstrSaveFilePath, CFile::modeWrite|CFile::modeCreate, &err))
		{
			err.ReportError();
			return FALSE;
		}

		CString cstrHead = _T("Longitude\tLatitude\tTraffic In Grid\n"); //列头
		saveHotFile.WriteString(cstrHead); //输出列头
		std::map<DWORD,OptimizedBaseOut>::iterator iter = newSiteResult.hotSpotSet.begin();
		for(; iter!= newSiteResult.hotSpotSet.end(); iter++)  //循环写内容
		{
			CString strLine;
			strLine.Format("%0.6f\t%0.6f\t%0.2f\n", iter->second.dLongitude, iter->second.dLatitude,iter->second.fWeight);
			saveHotFile.WriteString(strLine);
		}

		saveHotFile.Close();
rxguoblp 2013-04-19
  • 打赏
  • 举报
回复
经典的串口接收数据的例子如下: 1.在头文件中声明存储数据的数组和记录数据的文件地址 BYTE rxdata[4096]; //设置BYTE数组 An 8-bit integerthat is not signed. CFile m_file(_T("data.txt"),CFile::modeCreate|CFile::modeWrite); 2.写MScomm232的接收事件(记得接收事件的ID应该是2吧)
void COperation::OnCommMscomm1()//串口接收数据并处理 { int nEvent=m_Comm.get_CommEvent();//得到事件 switch(nEvent) { case 2://接收数据事件 { VARIANT variant_inp; COleSafeArray safearray_inp; long len,k; //-------------接收数据并进行处理---------------// k=m_Comm.get_InBufferCount();//接收缓冲区字符数 if(k>0) { variant_inp=m_Comm.get_Input(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组,存入rxdata } //-------------写入文本文件---------------// for (int j=0;j<len;j++) { temp.Format(_T("%0x"),rxdata[j]); mydata += temp; mydata += " ";//隔开两个位置; } mydata += "\r\n"; m_file.Write(mydata,mydata.GetLength());//写到文件中 mydata = "";//清空 } default: break; } }
weiql6 2013-04-19
  • 打赏
  • 举报
回复
FILE *pFile = fopen("c:\\data.txt","a"); fseek( pFile, 0, SEEK_END); //每次都移动到文件结尾在写入 fwrite(data,1, strlen(data), pFile); fclose(pFile)
gan0326 2013-04-19
  • 打赏
  • 举报
回复
引用 5 楼 tiger9991 的回复:
上段代码,楼主就懂 C/C++ code?12345678910111213141516171819CString cstrSaveFilePath; cstrSaveFilePath = m_cstrSaveOBpath + _T("\\HotPoint_") + cstrViewName +_T(".txt"); if(!saveHo……
万分感谢,可以用了
林嘉敏 2013-04-19
  • 打赏
  • 举报
回复
用createfile。
hdg3707 2013-04-18
  • 打赏
  • 举报
回复
想保存成EXCEL的格式,就把扩展名改成csv就行了,数据用空格或逗号分隔.也就是只要是空格或逗号分隔的数据,扩展名就可以是txt和csv
shen_wei 2013-04-18
  • 打赏
  • 举报
回复
FILE *pFile = fopen("c:\\data.txt","a"); fseek( pFile, 0, SEEK_END); //每次都移动到文件结尾在写入 fwrite(data,1, strlen(data), pFile); fclose(pFile);
加载更多回复(1)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧