繁体   English   中英

如何从text(csv)文件将2D数组加载到Octave?

[英]How to load 2D array from a text(csv) file into Octave?

考虑以下text(csv)文件:

1, Some text
2, More text
3, Text with comma, more text

如何在Octave中将数据加载到2D数组中? 该数字可以进入第一列,第一个逗号右边的所有文本(包括其他逗号)都进入第二个文本列。

如有必要,我可以使用其他定界符替换第一个逗号。

不能将不同大小的st放入数组。 您需要创建一个所谓的单元数组

从问题中读取数据的一种可能方法是将存储在文件Test.txt中的数据读入单元格数组中

t1 = textread("Test.txt", "%s", "delimiter", "\n");
for i = 1:length(t1)
    j = findstr(t1{i}, ",")(1);
    T{i,1} = t1{i}(1:j - 1);
    T{i,2} = strtrim(t1{i}(j + 1:end));
end

现在
T{3,1}为您提供3
T{3,2}为您Text with comma, more text

经过大量的搜索和调试,这是我如何在Octave 3.2.4上运行它的方法。 使用| 作为分隔符(而不是逗号)。

数据文件现在看起来像:

1|Some text
2|More text
3|Text with comma, more text

调用方法如下: data = load_data('data/data_file.csv', NUMBER_OF_LINES);

局限性:您需要知道要获得多少行。 如果要全部获取,则需要编写一个函数来计算文件中的行数,以初始化cell_array。 一切都很笨拙和原始。 对于“高级语言(如Octave)”来说,就这么多。

注意:经过使人不愉快的工作之后,看来Octave并不是很有用,除非您喜欢浪费时间编写代码来完成最简单的事情。 更好的选择似乎是带有机器学习或矩阵库的R,Python或C#/ Java。

function all_messages = load_data(filename, NUMBER_OF_LINES)
  fid = fopen(filename, "r");

  all_messages = cell (NUMBER_OF_LINES, 2 );
  counter = 1;

  line = fgetl(fid);

  while line != -1
      separator_index = index(line, '|');
      all_messages {counter, 1} = substr(line, 1, separator_index - 1); % Up to the separator
      all_messages {counter, 2} = substr(line, separator_index + 1, length(line) - separator_index); % After the separator
      counter++;

      line = fgetl(fid);
  endwhile

  fprintf("Processed %i lines.\n", counter -1);
  fclose(fid);
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM