
vc读取txt某一行某个数据,并在edit box控件中显示。本人新手,望详细点,谢谢~
txt路径已知,数据如下{-0.0595486,-0.00329955,0.0941424}{-0.016271,0.000397104,-0.00654055}{-0....
txt路径已知,数据如下
{-0.0595486,-0.00329955,0.0941424}
{-0.016271,0.000397104,-0.00654055}
{-0.0928348,0.00314636,-0.0591967}
如要将第二行第二个数据0.000397104取出,并显示在控件中,请问该如何做呢?
谢谢~ 展开
{-0.0595486,-0.00329955,0.0941424}
{-0.016271,0.000397104,-0.00654055}
{-0.0928348,0.00314636,-0.0591967}
如要将第二行第二个数据0.000397104取出,并显示在控件中,请问该如何做呢?
谢谢~ 展开
2个回答
展开全部
你好,希望我的回答能够对你有所帮助。
1.假如你现在正在学习VC串口编程,强烈建议你安装一个“虚拟串口软件vspdxp.exe”,再找个“sscom3.2串口通讯调试工具”。之后就可以完全用软件模拟串口通信来调试你的vc程序,很方便
2.我自己写了个程序实现你的要求,vc6下测试通过,工程下载地址:
3. 萍水e相逢 推荐的 “ 龚建伟的个人主页, ”绝对是学习串口通信的好网站,望有空多上去看看。
4.以下是主要代码,仅供参考。
/****************************************************************************
在OnInitDialog()里初始化
****************************************************************************/
BOOL CCommTest::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//Initial COM
m_ctrlComm.SetCommPort(1); //选择com1
m_ctrlComm.SetSettings("9600,n,8,1"); //通信参数设置 波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInBufferSize(1024); //指定接收缓冲区大小
m_ctrlComm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputMode(1); //定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。
m_ctrlComm.SetInputLen(0); //设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲 区中的全部内容。
m_ctrlComm.SetInBufferCount(0); //清空接收缓冲区
m_ctrlComm.SetPortOpen(TRUE); //打开串口
return TRUE; // return TRUE unless you set the focus to a control
}
/****************************************************************************
接收函数
****************************************************************************/
void CCommTest::OnComm()
{
char Rec_Data_Array[2048]; //用于接受数据
if (m_ctrlComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
{
VARIANT ReceiveData = m_ctrlComm.GetInput(); //获取数据
int Data_Len = ReceiveData.parray->rgsabound->cElements; //取出一维的数据个数
memcpy(Rec_Data_Array, (char*) ReceiveData.parray->pvData, Data_Len); //拷贝出数据
Rec_Data_Array[Data_Len] = 0;
}
//将获取的字符串显示在edit框里
::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_RXDATA),Rec_Data_Array);
}
/****************************************************************************
发送函数
****************************************************************************/
void CCommTest::OnTransmit()
{
char buf[100]=;
::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_TXDATA),buf,sizeof(buf));
m_ctrlComm.SetOutput(COleVariant(buf));//发送数据
}
1.假如你现在正在学习VC串口编程,强烈建议你安装一个“虚拟串口软件vspdxp.exe”,再找个“sscom3.2串口通讯调试工具”。之后就可以完全用软件模拟串口通信来调试你的vc程序,很方便
2.我自己写了个程序实现你的要求,vc6下测试通过,工程下载地址:
3. 萍水e相逢 推荐的 “ 龚建伟的个人主页, ”绝对是学习串口通信的好网站,望有空多上去看看。
4.以下是主要代码,仅供参考。
/****************************************************************************
在OnInitDialog()里初始化
****************************************************************************/
BOOL CCommTest::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//Initial COM
m_ctrlComm.SetCommPort(1); //选择com1
m_ctrlComm.SetSettings("9600,n,8,1"); //通信参数设置 波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInBufferSize(1024); //指定接收缓冲区大小
m_ctrlComm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputMode(1); //定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。
m_ctrlComm.SetInputLen(0); //设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲 区中的全部内容。
m_ctrlComm.SetInBufferCount(0); //清空接收缓冲区
m_ctrlComm.SetPortOpen(TRUE); //打开串口
return TRUE; // return TRUE unless you set the focus to a control
}
/****************************************************************************
接收函数
****************************************************************************/
void CCommTest::OnComm()
{
char Rec_Data_Array[2048]; //用于接受数据
if (m_ctrlComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
{
VARIANT ReceiveData = m_ctrlComm.GetInput(); //获取数据
int Data_Len = ReceiveData.parray->rgsabound->cElements; //取出一维的数据个数
memcpy(Rec_Data_Array, (char*) ReceiveData.parray->pvData, Data_Len); //拷贝出数据
Rec_Data_Array[Data_Len] = 0;
}
//将获取的字符串显示在edit框里
::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_RXDATA),Rec_Data_Array);
}
/****************************************************************************
发送函数
****************************************************************************/
void CCommTest::OnTransmit()
{
char buf[100]=;
::GetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT_TXDATA),buf,sizeof(buf));
m_ctrlComm.SetOutput(COleVariant(buf));//发送数据
}
展开全部
cstdiofile ftxt;
ftxt.open("c:\\",cfile::moderead);
int pos1;
cstring str;
cstring strtmp;
cstring strEditTxt;
int i = 0;
while(ftxt.readstring(str))
{
i++;
if(i==2)
{
strtmp = str;
pos1 = strtmp.find(",");
strtmp.delete(0,pos1+1);
pos1 = strtmp.find(",");
strEditTxt = strtmp.left(pos1+1);
}
}
strEditTxt 即为你需要的数据.
ftxt.open("c:\\",cfile::moderead);
int pos1;
cstring str;
cstring strtmp;
cstring strEditTxt;
int i = 0;
while(ftxt.readstring(str))
{
i++;
if(i==2)
{
strtmp = str;
pos1 = strtmp.find(",");
strtmp.delete(0,pos1+1);
pos1 = strtmp.find(",");
strEditTxt = strtmp.left(pos1+1);
}
}
strEditTxt 即为你需要的数据.
追问
error C2039: 'find' : is not a member of 'CString'
error C2059: syntax error : 'delete'
error C2039: 'pos1' : is not a member of 'CString'
error C2039: 'strtmp' : is not a member of 'CString'
error C2039: 'find' : is not a member of 'CString'
error C2039: 'left' : is not a member of 'CString'
……see declaration of 'CString'
请问出现这样的错误是什么原因呢?
追答
哦,这个是MFC下封装好的,在#include
头文件内,你写的时候没有头文件吧.多看看下MSDN就知道了.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询