【发布时间】:2017-07-30 18:37:24
【问题描述】:
这是我在 stackoverflow 上的第一个问题。我在使用 textread 读取带有 Matlab 的 .txt 文件时遇到问题。 .txt,真的很乱,结构如下。
"ALMEMO";"BEREICH:";"L420";"DIGI";"DIGI";"DIGI";"DIGI";;;;;;;"DIGI";"DIGI";"DIGI";"DIGI";;;;;;;"DIGI";"DIGI";"DIGI";"DIGI";;;;;;;"DIGI";"DIGI";"DIGI";"DIGI";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"CoCo";"CoCo";"CoCo";"CoCo";"CuCo";"CoCo";"CoCo";"CoCo";"CoCo";"CoCo";;;;;;;;;;;"CoCo";"CoCo";"CoCo";"CoCo";"CoCo";"CoCo";"CoCo";"CoCo";"CoCo";"CoCo"
"5690-2";"KOMMENTAR:";"";"T,t ";"T,t ";"Temperatur";"T,t ";;;;;;;"RH,Uw ";"RH,Uw ";"Feuchte ";"RH,Uw ";;;;;;;"DT,td ";"DT,td ";"Taupunkt ";"DT,td ";;;;;;;"MH,r g/kg ";"MH,r g/kg ";"Mischung ";"MH,r g/kg ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"";"";"";"";"";"";"";"";"";"";;;;;;;;;;;"";"";"";"";"";"";"";"";"";""
"SD3.10";"GW-MAX:";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
"ALMEMO.001";"GW-MIN:";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
"DATUM:";"ZEIT:";"M00: ms";"M01: øC";"M02: øC";"M03: øC";"M04: øC";;;;;;;"M11: %H";"M12: %H";"M13: %H";"M14: %H";;;;;;;"M21: øC";"M22: øC";"M23: øC";"M24: øC";;;;;;;"M31: gk";"M32: gk";"M33: gk";"M34: gk";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"M70: øC";"M71: øC";"M72: øC";"M73: øC";"M74: øC";"M75: øC";"M76: øC";"M77: øC";"M78: øC";"M79: øC";;;;;;;;;;;"M90: øC";"M91: øC";"M92: øC";"M93: øC";"M94: øC";"M95: øC";"M96: øC";"M97: øC";"M98: øC";"M99: øC"
07.03.21;11:29:24;0,;22,91;23,15;23,68;22,75;;;;;;;38,3;74,1;70,;38,8;;;;;;;8,;18,3;17,8;8,1;;;;;;;6,6;13,2;12,8;6,6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-
;11:30:24;0,;22,9;23,14;23,69;22,82;;;;;;;38,4;72,6;71,9;38,5;;;;;;;8,;18,;18,3;8,;;;;;;;6,6;12,9;13,2;6,6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-
;11:31:24;0,;22,94;23,14;23,68;22,88;;;;;;;38,3;75,4;71,5;38,5;;;;;;;8,;18,6;18,2;8,1;;;;;;;6,6;13,4;13,1;6,6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-
;11:32:24;0,;23,;23,13;23,68;22,95;;;;;;;38,2;73,;72,3;38,5;;;;;;;8,;18,1;18,4;8,1;;;;;;;6,6;13,;13,3;6,7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-;;;;;;;;;;;-;-;-;-;-;-;-;-;-;-
六行标题后面是实际数据,用';'分隔并使用逗号而不是点格式化浮点数。我需要的数据不是用整行来表示,而只是前九个元素(日期、小时、9 个浮点数)。
我写的读取文件的代码,有点天真,看其他代码,如下:
[date1, hour1, V0, Temp1, Temp2, Temp3, Temp4, RH1, RH2, RH3, RH4] = textread('file.txt', '%c %c %f %f %f %f %f %c* %c* %c* %c* %c* %c* %f %f %f %f', 'headerlines', 7, 'delimiter', ';');
显然它不起作用。我认为在我的代码版本中应该已经跳过了标题,因此,总而言之,仍然存在以下问题:
- 如何将多个分隔符视为一个? (或者忽略它们,就像我在代码中尝试做的那样)
- 如何使仅出现在标题后第一行的日期出现在整个代码中? (我想我可以用 for 循环填充输出矩阵的第一列)
- 如何剪切文本文件的行,忽略第九个浮点数之后的所有内容? - 如何读取逗号分隔的浮点数? (我尝试使用记事本“替换”功能将它们转换为点,在我的情况下这是一个有效的解决方案,但仍然没有解决问题)
提前感谢所有愿意回答、保重、 朱塞佩
【问题讨论】:
-
我不知道 MATLAB 是否有足够的灵活性来解析这样的文件。如果您事先使用其他语言(如 PERL)来编辑文件,可能会更好。
-
您应该阅读
textscan的帮助。特别是MultipleDelimitersAsOne和HeaderLines选项 -
如果您将整个文件作为字符串读取,您可能会考虑使用 regexprep(strFile, '+;', ';') 对该字符串进行后处理以替换多次出现的 ;一个。然后,您可以将 ',' 替换为 '.'使用正则表达式并逐步获得您想要的最终数据表示
-
谢谢。我正在详细说明 Morc 建议的代码,虽然我还没有完成,但我认为我正在创建一个不优雅但有效的代码的好方法。
标签: matlab floating-point