作者fxxkjoe1231 (鲁到入味)
看板MATLAB
标题[问题] 以字串为变数名称
时间Mon Aug 22 10:55:33 2016
板上各位好,我的问题在於能否有办法将读入的字串拿来命名变数?
我的目的在於将说明档内的项目及内容对应读出至同个cell中後,
将该项目字串作为其内容字串的变数名称。
说明档内容概略如下:
.
.
.
FILE_DATE = 2015-07-25T14:36:47Z
STATION_ID = "LGN"
PROCESSING_SOFTWARE_VERSION = "LPGS_2.5.1"
.
.
.
我以for回圈及fgetl逐条读取後以strtok取出等号前後的文字分别为项目及内容,
并存至cell内table{line,1}及table{line,2}中。
目前卡住的地方在於我想用table{line,1}的字串逐项为table{line,2}内的字串命名,
即键入FILE_DATE会直接跳出2015-07-25T14:36:47Z。
请板上先进不吝提点,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.218.39.53
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1471834535.A.C93.html
1F:推 sunev: eval万能,不过为什麽要这麽做? 08/22 11:16
感谢sun大提示,之前就有用eval但一直失败,刚终於试成功,
对於引号放置的位置感觉仍是尝试错误...
eval([table{str_lines,1} '= table{str_lines,2}'])
主要是因为这个说明档未来仍有可能增减内容,而用这种方式就能将所有资讯读入。
而对於特定用途的应用,我只需知道哪些项目是我需要的就可以把内容抓出来使用。
※ 编辑: fxxkjoe1231 (49.218.39.53), 08/22/2016 15:04:35
2F:推 sunev: 先看看这是是不你要的字串 08/22 15:42
3F:→ sunev: [table{str_lines,1} '= table{str_lines,2}'] 08/22 15:42
4F:→ sunev: 应该是弄反了 08/22 15:42
5F:→ sunev: [table{str_lines,1} = ''table{str_lines,2}''] 08/22 15:43
6F:→ sunev: 不过你这里要用eval,之後你所谓的「将所有资讯读入」 08/22 15:44
7F:→ sunev: 打算怎麽做?一样用eval?资讯一直都在那个table函数啊? 08/22 15:44
我用回文内的部分没问题,内容都以项目名重新命名。
我的意思为,假设我的说明档内有一百条,则跑了我询问部分前的程序後,
可得到一个table,内部有该说明档内的项目及内容(值)各一百项。
而我的问题部分则可以将该table内的内容以项目命名,且该项目名称不变。
若未来的说明档增加了其他项目(>一百条),则我一样可以读档,
并将我要的项目及其值抓出来使用。
即使说明档内的项目增加而改变各项目的排序,而我事先已经确定我需要的项目为何,
我都可以快速读档并用该项目名称找到对应的值。
早期我是先记好各项目位置後,只抓特定值,但自从说明档改版後新增资讯,
就得亲自打开说明档去找被更改後各项目的位置。
前文我提到的方法是我想到目前较自动化且好维护的方法
※ 编辑: fxxkjoe1231 (49.218.39.53), 08/22/2016 16:36:13
8F:推 sunev: 得到table的程序已经自动化了,既使说明档做了变动,也可以 08/22 16:44
9F:→ sunev: 自动产生新的table? 08/22 16:44
10F:→ sunev: 所以你需要的只是「用该项目名称找到对应的值」,那用那个 08/22 16:45
11F:→ sunev: table变数就可以办到了啊? 08/22 16:45
我大概懂意思了,是指透过字串判断直接去找table内对应的值?
※ 编辑: fxxkjoe1231 (49.218.39.53), 08/22/2016 22:14:11
12F:推 sunev: 差不多是这个意思,可能要用for,不过才几百个也不会太慢 08/22 22:23