如何在 Octave 中读取具有不同列数的 csv 文件
How to read a csv file with varying number of columns in Octave
我想读取 csv 文件中选定的字符串数据列,其中列的总数因行而异。假设csv文件的内容如下:
line 1: a1,b1,c1,d1,e1
line 2: a2,b2,c2
line 3: a3,b3,c3,d3
我想将第一列读入变量 a,将第二列读入变量 b,并期望 a 和 b 具有以下值:
a[1,1] = a1, a[2,1] = a2, a[3,1] = a3
b[1,1] = b1, b[2,1] = b2, b[3,1] = b3
我尝试将 textread 与仅匹配所需列的格式说明符一起使用:
[a,b] = textread('SampleFile.csv','%s%s','delimiter',',')
但这产生了错误的结果:
a[1,1] = a1, a[2,1] = c1, a[3,1] = e1, a[4,1] = b2, a[5,1] = b3, a[6,1] = d3
b[1,1] = b2, b[2,1] = d1, b[3,1] = a2, b[4,1] = a3, b[5,1] = c3, b[6,1] =
我还尝试使用 textread,格式说明符匹配最大列数,对不需要的列使用虚拟变量:
[a,b,dummy1,dummy2,dummy3] = textread('SampleFile.csv','%s%s%s%s%s','delimiter',',')
但这也产生了错误的结果:
a[1,1] = a1, a[2,1] = a2, a[3,1] = d3
b[1,1] = b2, b[2,1] = b2, b[3,1] =
有没有办法使用 textread 命令或其他方法只捕获所需的列?
我是 运行 Octave 3.8.0 Mac OS 10.9.5.
您的输出符合预期,因为它完全模仿了 function documentation:
中的示例
Assume a data file like:
1 a 2 b
3 c 4 d
5 e
[a, b] = textread (f, "%f %s")
returns two columns of data, one with doubles, the other a
cellstr array:
a = [1; 2; 3; 4; 5]
b = {"a"; "b"; "c"; "d"; "e"}
您必须逐行阅读您的文本文件才能执行您想要的操作:
f = fopen ("test.txt");
c1 = {};
c2 = {};
while (l = fgetl (f)) != -1
[a b] = strread (l, "%s %s");
c1 = cat (1, c1, a{1});
c2 = cat (1, c2, b{1});
endwhile
fclose (f);
我想读取 csv 文件中选定的字符串数据列,其中列的总数因行而异。假设csv文件的内容如下:
line 1: a1,b1,c1,d1,e1
line 2: a2,b2,c2
line 3: a3,b3,c3,d3
我想将第一列读入变量 a,将第二列读入变量 b,并期望 a 和 b 具有以下值:
a[1,1] = a1, a[2,1] = a2, a[3,1] = a3
b[1,1] = b1, b[2,1] = b2, b[3,1] = b3
我尝试将 textread 与仅匹配所需列的格式说明符一起使用:
[a,b] = textread('SampleFile.csv','%s%s','delimiter',',')
但这产生了错误的结果:
a[1,1] = a1, a[2,1] = c1, a[3,1] = e1, a[4,1] = b2, a[5,1] = b3, a[6,1] = d3
b[1,1] = b2, b[2,1] = d1, b[3,1] = a2, b[4,1] = a3, b[5,1] = c3, b[6,1] =
我还尝试使用 textread,格式说明符匹配最大列数,对不需要的列使用虚拟变量:
[a,b,dummy1,dummy2,dummy3] = textread('SampleFile.csv','%s%s%s%s%s','delimiter',',')
但这也产生了错误的结果:
a[1,1] = a1, a[2,1] = a2, a[3,1] = d3
b[1,1] = b2, b[2,1] = b2, b[3,1] =
有没有办法使用 textread 命令或其他方法只捕获所需的列?
我是 运行 Octave 3.8.0 Mac OS 10.9.5.
您的输出符合预期,因为它完全模仿了 function documentation:
中的示例Assume a data file like:
1 a 2 b
3 c 4 d
5 e
[a, b] = textread (f, "%f %s")
returns two columns of data, one with doubles, the other a cellstr array:
a = [1; 2; 3; 4; 5]
b = {"a"; "b"; "c"; "d"; "e"}
您必须逐行阅读您的文本文件才能执行您想要的操作:
f = fopen ("test.txt");
c1 = {};
c2 = {};
while (l = fgetl (f)) != -1
[a b] = strread (l, "%s %s");
c1 = cat (1, c1, a{1});
c2 = cat (1, c2, b{1});
endwhile
fclose (f);