MFC中用serialport类写的串口通信,想读取txt文件里面内容并逐行发送,求解决方法额 如题,串口已经写好,界面如图,选择指令即为打开txt文件并能显示出来,此部分功能都已实现。菜鸟一只,求大家指导一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是说你想要知道如何把你从ini文件里读出来的CString循环写到串口?你都读出来可以显示到Edit里了,又说封好串口了,那不就是CString转换一下变量类型?你问的是什么意思? 安行读取txt文件内容,转换成Hex格式,扔进串口,完事CStdioFile类进行文本安行读 你如果要做循环,可以再你的配置文件内加这样:[COMMAND_TEST]CMD_TOTAL = nCMD1 = ...CMD2 = ...CMD3 = ......CMDn = ...然后把n也读出来#define CMDSIZE 512CString strConfig;CString strFileName;int nLen = GetPrivateProfileString("COMMAND_TEST", "CMD_TOTAL", NULL, strConfig.GetBuffer(CMDSIZE), CMDSIZE, strFileName);strConfig.ReleaseBuffer();if (nLen < 0){ LogInfo("Read Command_TEST.ini:TOTAL Failed,Please Check Config File!", RED); return;}int nTotalNumber = atoi(strConfig);//----------------------------------------------------------Command Amountfor(int nIndex = 0; nIndex<nTotalNumber ;nIndex ++){逐个写到串口;} 如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。 发送框用listctr控件,每读取一行txt就存到控件的对应行,发送的时候从控件的第一行开始发送,这样可以? 如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。可以按照7楼的建议把显示的控件改为ListControl;你也可以继续用Edit,按照我在4楼给你回复的方法写配置文件,思路就是两次循环:1.点击选择文件:从配置文件循环读取字符串并显示到Edit窗口,注意在读出的字符串末尾加\r\n实现换行;2.点击发送:从配置文件循环读取字符串并发送到串口; 要求不能用list,只能用数组。我刚入手菜鸟,不是很会用数组。就是从txt读一行然后定时器发一行。我现在所有功能都实现了,就差这个。大神可否赐教一下,详细点额最好,十分感谢 数组?string数组?你是指读取的一行保存到一个string数组元素里面吗。这样也可以啊,做个循环,对数组里面的元素循环发送就可以了啊 对对对,就是这个意思,我弄了半天还是不会,不知道把数据一行一行的写到数组应该怎么写。比如txt文件中:234 4ge hhf可否详细一点,实在是不会写了。十分感谢。 读txt文件的时候,用getline循环读取。你这个用vector更好,因为你不知道文件里面到底有多少行,用vector<string>存。每读取到一行就添加到vector里面去。直到读取结束。发的时候循环遍历vector发就好了。vector本质是个动态数组 你好,十分感谢你的回答。不过我现在还是有点不是很清楚数组的使用。dlg.h中:cstring a1[],a2[],a3[];dlg.cpp中:getline(myfile,strm,'\n')a1[]=strem;我现在只能想到这么多,不知道怎么才可以把每行读到对应的数组中。新手实在想不明白,希望老兄能不吝赐教,十分感谢! string buff; int n=0; ifstream infile; infile.open("你要打开的文件名.txt"); if(!infile) return; while(getline(infile, buff)) { a[n++]=buff; } 使用上面这个代码你要确保你的数组有足够的存储空间,不然最好用vector 仅供参考://NAME: essaie bla bla//DIMENSION: 8//DATA//1 14 15//2 11 10//3 6 4//4 7 13//5 9 21//6 19 3//7 1 5//8 8 8//EOF//// 文本文件中可能还含有其他内容,但是需要用到的内容即以上//比如data.txt://NAME: essaie bla bla//其它内容//DIMENSION: 8//其它内容//DATA//其它内容//1 14 15//其它内容//2 11 10//其它内容//3 6 4//其它内容//4 7 13//其它内容//5 9 21//其它内容//6 19 3//其它内容//7 1 5//其它内容//8 8 8//其它内容//EOF// 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值// 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标// 所有的这些将赋值给一个事先定义好的结构#include <stdio.h>#include <string.h>#define MAXCPL 80 //每行最大字符数#define MAXCITY 100 //每组数据中DATA最多项数,DIMENSION的最大值#define MAXNAMEL 32 //NAME最大长度struct S { char NAME[MAXNAMEL+1]; int DIMENSION; struct D { int NO; int X; int Y; } DATA[MAXCITY];} s;FILE *f;int st,n,i;char ln[MAXCPL];int main() { f=fopen("data.txt","r"); if (NULL==f) { printf("Can not open file data.txt!\n"); return 1; } st=0; n=0; while (1) { if (NULL==fgets(ln,MAXCPL,f)) break; if (st==0) { if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1; } else if (st==1) { if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2; } else if (st==2) { if (0==strcmp(ln,"DATA\n")) st=3; } else if (st==3) { if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) { n++; if (n>=MAXCITY || n>=s.DIMENSION) break; } } } fclose(f); printf("s.NAME=[%s]\n",s.NAME); printf("s.DIMENSION=%d\n",s.DIMENSION); for (i=0;i<n;i++) { printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y); } return 0;}//s.NAME=[essaie bla bla]//s.DIMENSION=8//s.DATA[0].NO,X,Y=1,14,15//s.DATA[1].NO,X,Y=2,11,10//s.DATA[2].NO,X,Y=3,6,4//s.DATA[3].NO,X,Y=4,7,13//s.DATA[4].NO,X,Y=5,9,21//s.DATA[5].NO,X,Y=6,19,3//s.DATA[6].NO,X,Y=7,1,5//s.DATA[7].NO,X,Y=8,8,8 GDI+位图经过矩阵变换后裁切出错 初学MFC 关于vc释放CFileDialog文件对话框内存的问题 请问发送自定义消息时怎样传递字符串指针 请问在windows系统下,怎样用c++函数获得系统的信息呢? 申请基础版斑竹,希望大家支持! 喝可乐,呵呵 请问.bmf文件用什么打开? 请问如何控制剪贴板复制文件 如何在VC中使用ADO存储数据到SQL Server或Sybase的image字段,急! 使用ReadFile读取串口的数据时,存入缓冲区的数据一直为零 win10 系统下没有iis组件
CStdioFile类进行文本安行读
[COMMAND_TEST]
CMD_TOTAL = nCMD1 = ...
CMD2 = ...
CMD3 = ...
...
CMDn = ...然后把n也读出来
#define CMDSIZE 512
CString strConfig;
CString strFileName;int nLen = GetPrivateProfileString("COMMAND_TEST", "CMD_TOTAL", NULL, strConfig.GetBuffer(CMDSIZE), CMDSIZE, strFileName);
strConfig.ReleaseBuffer();
if (nLen < 0)
{
LogInfo("Read Command_TEST.ini:TOTAL Failed,Please Check Config File!", RED);
return;
}
int nTotalNumber = atoi(strConfig);//----------------------------------------------------------Command Amountfor(int nIndex = 0; nIndex<nTotalNumber ;nIndex ++)
{
逐个写到串口;
}
如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。
可以按照7楼的建议把显示的控件改为ListControl;
你也可以继续用Edit,按照我在4楼给你回复的方法写配置文件,思路就是两次循环:
1.点击选择文件:从配置文件循环读取字符串并显示到Edit窗口,注意在读出的字符串末尾加\r\n实现换行;
2.点击发送:从配置文件循环读取字符串并发送到串口;
比如txt文件中:234
4ge
hhf
可否详细一点,实在是不会写了。十分感谢。
每读取到一行就添加到vector里面去。直到读取结束。发的时候循环遍历vector发就好了。vector本质是个动态数组
你好,十分感谢你的回答。不过我现在还是有点不是很清楚数组的使用。
dlg.h中:
cstring a1[],a2[],a3[];
dlg.cpp中:
getline(myfile,strm,'\n')
a1[]=strem;
我现在只能想到这么多,不知道怎么才可以把每行读到对应的数组中。新手实在想不明白,希望老兄能不吝赐教,十分感谢!
string buff;
int n=0;
ifstream infile;
infile.open("你要打开的文件名.txt");
if(!infile)
return;
while(getline(infile, buff))
{
a[n++]=buff;
}
//DIMENSION: 8
//DATA
//1 14 15
//2 11 10
//3 6 4
//4 7 13
//5 9 21
//6 19 3
//7 1 5
//8 8 8
//EOF
//
// 文本文件中可能还含有其他内容,但是需要用到的内容即以上//比如data.txt:
//NAME: essaie bla bla
//其它内容
//DIMENSION: 8
//其它内容
//DATA
//其它内容
//1 14 15
//其它内容
//2 11 10
//其它内容
//3 6 4
//其它内容
//4 7 13
//其它内容
//5 9 21
//其它内容
//6 19 3
//其它内容
//7 1 5
//其它内容
//8 8 8
//其它内容
//EOF// 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值
// 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标
// 所有的这些将赋值给一个事先定义好的结构
#include <stdio.h>
#include <string.h>
#define MAXCPL 80 //每行最大字符数
#define MAXCITY 100 //每组数据中DATA最多项数,DIMENSION的最大值
#define MAXNAMEL 32 //NAME最大长度
struct S {
char NAME[MAXNAMEL+1];
int DIMENSION;
struct D {
int NO;
int X;
int Y;
} DATA[MAXCITY];
} s;
FILE *f;
int st,n,i;
char ln[MAXCPL];
int main() {
f=fopen("data.txt","r");
if (NULL==f) {
printf("Can not open file data.txt!\n");
return 1;
}
st=0;
n=0;
while (1) {
if (NULL==fgets(ln,MAXCPL,f)) break;
if (st==0) {
if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;
} else if (st==1) {
if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
} else if (st==2) {
if (0==strcmp(ln,"DATA\n")) st=3;
} else if (st==3) {
if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
n++;
if (n>=MAXCITY || n>=s.DIMENSION) break;
}
}
}
fclose(f);
printf("s.NAME=[%s]\n",s.NAME);
printf("s.DIMENSION=%d\n",s.DIMENSION);
for (i=0;i<n;i++) {
printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
}
return 0;
}
//s.NAME=[essaie bla bla]
//s.DIMENSION=8
//s.DATA[0].NO,X,Y=1,14,15
//s.DATA[1].NO,X,Y=2,11,10
//s.DATA[2].NO,X,Y=3,6,4
//s.DATA[3].NO,X,Y=4,7,13
//s.DATA[4].NO,X,Y=5,9,21
//s.DATA[5].NO,X,Y=6,19,3
//s.DATA[6].NO,X,Y=7,1,5
//s.DATA[7].NO,X,Y=8,8,8