zhyi49 发表于 2009-10-26 02:30:14

GUI 文本框显示问题

本帖最后由 zhyi49 于 2009-10-30 10:53 编辑


theta = pi/2
输出时
theta=
      1.5708

如何放同一行,即 这样〉 theta=1.5708


另外有个数据头,


Name=Prüfling 1
Comment=
Heading=
Line0=Antenne: vertikal
Line1=Bus-Leitung mit aktivem Master
Line2=
Line3=
Line4=
Line5=
Line6=
Param0=bis 30MHz: Schritt: Y=0,12 dB lin, X=0,012 MHz lin, t=50 ms,
Peak, 12 kHz, Meßbereich 60 dB, Low Noise, Vorverstärker ein, Rohde&Schwarz ESI
Param1=bis 300MHz: Schritt: Y=0,12 dB lin, X=0,12 MHz lin, t=50 ms,
Max Peak, 120 kHz, Meßbereich 50 dB, Low Noise, Vorverstärker ein, Rohde&Schwarz ESI
Param2=bis 1000MHz: Schritt: Y=0,12 dB lin, X=0,12 MHz lin, t=50 ms,
Max Peak, 120 kHz, Meßbereich 50 dB, Low Noise, Vorverstärker ein, Rohde&Schwarz ESI
Param3=
Param4=
Param5=
Param6=
Param7=
Param8=
Param9=
Tester=Hoh
No=01
DateTime=07.05.2009 09:13:22
StartTime=07.05.2009 09:01:58
XUnit=MHz
YUnit=dBµV/m

为读入以上数据头,我写的代码是

fid=fopen(fullname, 'r');
    iii = 1;
    headdata = filename;
    while 1
      ts=fgetl(fid);
      idx = strfind(ts,'=');
      if ~isempty(idx) && ~isequal(ts(end), '=')
            headdata = ;

    set(handles.edit1,'String',headdata)

用这句举例以下。在相应的位置显示出文件名。但显示不出来,

若为静态的却可以。比如

set(handles.edit1,'String','headdata')


            if strncmp(ts, 'Name=', 5)
                name = ts(idx+1:end);
            
            end
            if strncmp(ts, 'DateTime=', 9)
                leg = ts(idx+1:end);
            end
      end
      
      if (strcmp(ts, ''));
            break;
      end
    end

对一行数据读入并显示在相应的文本框里,比如Name 很好处理,
但是对于Param1 一个项数据占用两或三行,该如何提取?


主要目的是,把数据文件头读入后等号后有内容的部分放入相应的文本框中。
却因为等号后内容不在同行,报错说不可以,

各位大虾给提些建议,若能有代码提示更好了。非常谢谢!


非常谢谢

zp2000 发表于 2009-10-26 09:45:03

第一个问题不知道怎么处理,感觉一行两行区别不大吧
第二个,直接按照关键字来读取,把你里面的类似Param这样的有意义的词语定义成关键字,写程序的时候,遇到这种关键字后就开始分析,直到下一个关键字,然后把关键字之间的语句进行分析,以逗号,空格等分析出字符串来,再在这个基础上分析出各个字符串的含义,这部分内容已经接近编译原理了,看看编译原理的书吧

风天小畜 发表于 2009-10-26 10:48:10

如果格式明确,你可以手工指定读取格式! textscan等,都可以指定格式!最重要的是万能的 fscanf

如果只是有等号,逗号,空格等!还有英文的变量名,数字的变量值
用正规表达式吧(或者翻译成 正则表达式)

学习正规表达式,大约1个下午,就能满足你的应用了!

zhyi49 发表于 2009-10-26 16:26:04

急阿,能不能给各代码,多谢!

zhyi49 发表于 2009-10-27 16:09:50

想把结果放在GUI文本框里,但文本框只接受同行输入,所以出现这个问题的,各位能给个适用函数或代码吗,非常感谢!

prairie1 发表于 2009-10-27 17:11:49

theta=1.5708 ;
disp(['theta=' num=str(theta)]);
就可以实现第一步。

zhyi49 发表于 2009-10-27 19:56:21

我的输出是动态的。就是Matlab 自动格式是
theta=
   1,5708

GUI 文本框报错说,两行输出不能接受。。。

风天小畜 发表于 2009-10-27 20:55:23

本帖最后由 风天小畜 于 2009-10-27 20:56 编辑

我的输出是动态的。就是Matlab 自动格式是
theta=
   1,5708

GUI 文本框报错说,两行输出不能接受。。。
zhyi49 发表于 2009-10-27 19:56 http://forum.simwe.com/images/common/back.gif


文本框是支持多行的,你只需要看看help即可。

help是英文的,只要不采用“跳读”的方法,你就发现下面这句话:

For multiple line editable text or statictext controls, line breaks occur between each row of thestring matrix, and each cell of a cell array of strings. Verticalslash ('|') characters and \n characters are notinterpreted as line breaks, and instead show up in the text displayedin the uicontrol..

zhyi49 发表于 2009-10-30 10:53:27

to,风天小畜,我的还是不可以,重新修改了一下描述,各位大虾帮帮。

zhyi49 发表于 2009-10-31 08:01:56

哪位老大能帮帮阿。能给各代码建议更好,谢个先!
页: [1]
查看完整版本: GUI 文本框显示问题