如题,串口已经写好,界面如图,选择指令即为打开txt文件并能显示出来,此部分功能都已实现。菜鸟一只,求大家指导一下。

解决方案 »

  1.   

    你是说你想要知道如何把你从ini文件里读出来的CString循环写到串口?你都读出来可以显示到Edit里了,又说封好串口了,那不就是CString转换一下变量类型?你问的是什么意思?
      

  2.   

    安行读取txt文件内容,转换成Hex格式,扔进串口,完事
    CStdioFile类进行文本安行读
      

  3.   

    你如果要做循环,可以再你的配置文件内加这样:
    [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 ++)
    {
    逐个写到串口;
    }
      

  4.   

    如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。
      

  5.   

    发送框用listctr控件,每读取一行txt就存到控件的对应行,发送的时候从控件的第一行开始发送,这样可以?
      

  6.   

    如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。
    如图,我的串口已经写好,接收都可以,我就是想点选择指令(指令存在txt文件中,一行一行的)按钮后,显示在发送框里(也是一行一行的),然后点开始发送后也一行一行的发出去,后期我想加上定时器。
    可以按照7楼的建议把显示的控件改为ListControl;
    你也可以继续用Edit,按照我在4楼给你回复的方法写配置文件,思路就是两次循环:
    1.点击选择文件:从配置文件循环读取字符串并显示到Edit窗口,注意在读出的字符串末尾加\r\n实现换行;
    2.点击发送:从配置文件循环读取字符串并发送到串口;
      

  7.   

    要求不能用list,只能用数组。我刚入手菜鸟,不是很会用数组。就是从txt读一行然后定时器发一行。我现在所有功能都实现了,就差这个。大神可否赐教一下,详细点额最好,十分感谢
      

  8.   

    数组?string数组?你是指读取的一行保存到一个string数组元素里面吗。这样也可以啊,做个循环,对数组里面的元素循环发送就可以了啊
      

  9.   

    对对对,就是这个意思,我弄了半天还是不会,不知道把数据一行一行的写到数组应该怎么写。
    比如txt文件中:234
                                4ge
                                hhf
    可否详细一点,实在是不会写了。十分感谢。
      

  10.   

    读txt文件的时候,用getline循环读取。你这个用vector更好,因为你不知道文件里面到底有多少行,用vector<string>存。
    每读取到一行就添加到vector里面去。直到读取结束。发的时候循环遍历vector发就好了。vector本质是个动态数组
      

  11.   


    你好,十分感谢你的回答。不过我现在还是有点不是很清楚数组的使用。
    dlg.h中:
    cstring a1[],a2[],a3[];
    dlg.cpp中:
    getline(myfile,strm,'\n')
    a1[]=strem;
    我现在只能想到这么多,不知道怎么才可以把每行读到对应的数组中。新手实在想不明白,希望老兄能不吝赐教,十分感谢!
      

  12.   


       string buff;
       int n=0;
        ifstream infile;  
       infile.open("你要打开的文件名.txt"); 
        if(!infile)  
            return;
       while(getline(infile, buff)) 
    {
          a[n++]=buff;  
    }
      

  13.   

    使用上面这个代码你要确保你的数组有足够的存储空间,不然最好用vector
      

  14.   

    仅供参考://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