将文件读入Matlab
我想将一个文件读入Matlab,作为包含奇数格式信息的文件的矩阵 文件data.txt将数据写入:将文件读入Matlab,matlab,file-io,Matlab,File Io,我想将一个文件读入Matlab,作为包含奇数格式信息的文件的矩阵 文件data.txt将数据写入: 04001400 HI 34.50 118.27 19480701 08 LST 0 0 0 0 0 0 0 0 0 0 0 0 MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS 04001400 HI 34.50 118.27 19480801 08 LST
04001400 HI 34.50 118.27 19480701 08 LST
0 0 0 0 0 0 0 0 0 0 0 0
MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
04001400 HI 34.50 118.27 19480801 08 LST
0 0 0 0 0 0 0 0 0 0 0 0
MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
04001400 HI 34.50 118.27 19480901 08 LST
0 0 0 0 0 0 0 0 0 0 0 0
MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS MIS
第一个数字是站号,HI是一种情况,第三和第四个数字是纬度和长坐标,另一个数字是年、月、日,另一个数字(08)是时区,后面是LST表示时间范围。以下24个数字或上述示例中的0和MIS是特定区域和时间的值。我正在尝试将文件内容存储为这种类型的维度[n x 31]格式的矩阵(其中31是列数,n是文件中的总行数):
我尝试过基于函数textscan()以这种方式对其进行编码:
但它并不像我上面描述的那样有效。我有办法做到吗?谢谢你的帮助
注意:我想将日期(19480701)读取为字符串,以便以后可以将其格式化为日期类型 示例代码不起作用,因为
textscan()
假定文件中的每一行都具有相同的格式。也就是说,要使用textscan()
,每行必须具有相同数量的列,包含相同类型的数据
相反,我会将数据视为逗号分隔的值格式。将每行拆分为由空格分隔符分隔的标记列表:
您需要在文件中循环读取所有行。您的数据以三行为一节,因此一次处理三行数据
或者,您也可以对文本文件进行预处理,将三行的每一节重新格式化为一行。(只需删除每三行换行中的第一行和第二行)然后使用正则表达式将空格替换为逗号。您将得到以下结果:
04001400,HI,34.50,118.27,19480701,08,LST,0,0,0,0,0,0,0,0,0,0,0,0,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS
04001400,HI,34.50,118.27,19480801,08,LST,0,0,0,0,0,0,0,0,0,0,0,0,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS
04001400,HI,34.50,118.27,19480901,08,LST,0,0,0,0,0,0,0,0,0,0,0,0,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS
然后可以使用
textscan()
或者更好的是csvread()
实际上,您编写的代码应该非常接近工作状态。您只需告诉TestSCAN()将新行字符也视为一个普通的空白字符。
尝试删除格式字符串中的空白,并使用“whitespace”参数添加“\n”:
data=textscan(fid, '%d%s%f%f%s%d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s','whitespace',' \b\t\n';
此外,请确保再次检查输入文件是否以任何空行结尾。这似乎把textscan()搞砸了
希望这有帮助 谢谢你的帮助,这次成功了!
>> string = 'Need-to-split-this-string'
string =
Need-to-split-this-string
>> parts = strread(string,'%s','delimiter','-')
parts =
'Need'
'to'
'split'
'this'
'string'
04001400,HI,34.50,118.27,19480701,08,LST,0,0,0,0,0,0,0,0,0,0,0,0,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS
04001400,HI,34.50,118.27,19480801,08,LST,0,0,0,0,0,0,0,0,0,0,0,0,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS
04001400,HI,34.50,118.27,19480901,08,LST,0,0,0,0,0,0,0,0,0,0,0,0,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS,MIS
data=textscan(fid, '%d%s%f%f%s%d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s','whitespace',' \b\t\n';