【问题标题】:Wrong data array when reading a text file in Octave在 Octave 中读取文本文件时数据数组错误
【发布时间】: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


【解决方案1】:

这里的主要问题是在您的文件中使用逗号而不是点。

我的建议是忘记复杂的文本扫描,而是简单地预处理您的文件,用点替换有问题的逗号。这可以在 linux 终端上轻松完成,但如果您愿意,也可以在 octave 中轻松完成,例如

% Read in file as string
Data_str = fileread('test.txt');

% Correct commas to dots
CorrectedData_str = strrep( Data_str, ',' , '.' );

% Write data back to a file (I'm surprised there's no equivalent "filewrite" ...)
f = fopen( 'corrected_test.txt', 'w' );
fprintf(f, CorrectedData_str);
fclose(f);

一旦您对所有数据进行了预处理,导入就很简单:

MyData = importdata('corrected_test.txt');

【讨论】:

  • 我稍后在脚本中将逗号替换为点,但无论如何感谢:)
猜你喜欢
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多