【发布时间】:2019-11-19 00:39:52
【问题描述】:
我想读取一个文本文件,它有两列,如下所示。
-0,090 26,295
-0,342 26,294
-0,594 26,294
-0,846 26,295
-1,098 26,294
-1,368 26,296
-1,620 26,296
-1,872 26,296
我正在使用以下代码来读取它并创建数据数组。
filename = 'C:\Users\file location\test.txt';
delimiter = '\t';
formatSpec = '%s%s%[^\n\r]';
fileID = fopen(filename,'rt');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'ReturnOnError', false, 'EndOfLine', '\r\n');
fclose(fileID);
我得到的是这样的数组。
dataArray =
{
[1,1] =
{
[1,1] = -0,090
[2,1] = -0,594
[3,1] = -1,098
[4,1] = -1,620
[5,1] =
}
[1,2] =
{
[1,1] = 26,295
[2,1] = 26,294
[3,1] = 26,294
[4,1] = 26,296
[5,1] =
}
[1,3] =
{
[1,1] = -0,342 26,294
[2,1] = -0,846 26,295
[3,1] = -1,368 26,296
[4,1] = -1,872 26,296
[5,1] =
}
}
显然,Octave 只使用原始列的每隔两行来创建我的数组,并将跳过的值组合到第三列。
我真正期望的是这样的数组。
dataArray =
{
[1,1] =
{
[1,1] = -0,090
[2,1] = -0,342
[3,1] = -0,594
[4,1] = -0,846
[5,1] = -1,098
[6,1] = -1,368
[7,1] = -1,620
[8,1] = -1,872
}
[1,2] =
{
[1,1] = 26,295
[2,1] = 26,294
[3,1] = 26,294
[4,1] = 26,295
[5,1] = 26,294
[6,1] = 26,296
[7,1] = 26,296
[8,1] = 26,296
}
}
我认为这是 formatSpec 的问题。是否有可能调整我的代码以获得预期的数组?
【问题讨论】:
-
对我来说(Windows 10,Octave 5.1.0),
dataArray = textscan(fileID, '%s%s')可以胜任!? -
是的,谢谢它有效。显然,我想得太复杂了。
标签: octave