在两个csv文件之间找到相同的行,并使用它们创建一个Matlab变量
我有两个带有数字数据的CSV文件 CSV-1:在两个csv文件之间找到相同的行,并使用它们创建一个Matlab变量,matlab,csv,Matlab,Csv,我有两个带有数字数据的CSV文件 CSV-1: 1 -1 $c=2 5 6 -1 $c=8 6 -1 $c=2 CSV-2: 6 -1 $c=4 8 9 -1 4 $c=8 5 6 -1 $c=2 1 2 -1 3 $c=1 因此,CSV-1有3行。CSV-2有4行 我需要将这些文件读入MATLAB,找到它们之间相同的行,然后将它们保存在数组中,如 X=[6-1;56-1] **我得到的数据集在每行末尾都有$c值,我无法删除这些值。我需要一系列相同的数字,最后一部分是$c值。假设file1和
1 -1 $c=2
5 6 -1 $c=8
6 -1 $c=2
CSV-2:
6 -1 $c=4
8 9 -1 4 $c=8
5 6 -1 $c=2
1 2 -1 3 $c=1
因此,CSV-1有3行。CSV-2有4行
我需要将这些文件读入MATLAB,找到它们之间相同的行,然后将它们保存在数组中,如
X=[6-1;56-1]
**我得到的数据集在每行末尾都有$c值,我无法删除这些值。我需要一系列相同的数字,最后一部分是$c值。假设file1和file2分别是这些CSV文件的路径,您可以使用基于以下内容的方法:
1从csv文件导入数据
2删除尾随空格
3获取公共线
最终的代码应该是这样的-
%// Read in the CSV data as strings into cell arrays with each cell saving
%// one line from the files. Use strtrim to remove trailing whitespaces
csv1_data = strtrim(importdata(file1,'\n'))
csv2_data = strtrim(importdata(file2,'\n'))
%// Use intersect to find the common data (lines) for the desired output
X = intersect(csv2_data,csv1_data,'stable')
验证输入和结果-
>> type(file1)
1 -1
5 6 -1
6 -1
>> type(file2)
6 -1
8 9 -1 4
5 6 -1
1 2 -1 3
>> X
X =
'6 -1'
'5 6 -1'
如果您希望为每个相同的行分离出这些数字,您可以在那里再添加一行代码-
Xcell = cellfun(@(x) strsplit(x),X,'uni',0);
因此,输出将如下所示-
>> Xcell{1}
ans =
'6' '-1'
>> Xcell{2}
ans =
'5' '6' '-1'
我试图通过以下代码解决上述问题:
fid = fopen('csv-1.csv','r');
C = textscan(fid, repmat('%s',1,50), 'delimiter',' ', 'CollectOutput',true);
C = C{1};
fclose(fid);
for i = 1:length(C(1,:))
index = find(strcmp(C(:,i),'$c')); %index of $c in every columns
if length(index) > 0
C(index,i) = cellstr('0'); % masking $c with 0
C(index,i+1) = cellstr('0'); % masking '=' with 0
C(index,i+2) = cellstr('0'); % masking value with 0
end
end
C = num2cell( str2double(C)) ;
C = cell2mat(C); C(isnan(C)) = 0 ; %replacing all NaN with 0
同样,将csv-2的数据保存在D中,最后:
identical_lines = length(intersect(C,D,'rows'))
但是,这段代码需要花费大量的时间来执行。是否有其他方法可以快速解决此问题。您是否设法将csv文件读入矩阵?如果没有,请尝试csvread。相似意味着什么?什么是相似的行?“相似”是指相似的行。我还没有尝试使用csvread将文件读入矩阵。但是,现在我想,如果文件被读入一个度量单位,那么它们之间的相交将是最简单的解决方案。没错。我改变了题目。使用csvread或dlmread读取CSV,然后与矩阵相交,我得到了解决方案。@Divakar给出的解决方案也起了作用。当我浏览我的数据集时,我意识到问题是不同的。我已经改变了问题。非常感谢。这真的奏效了。我还需要将其保存为数组。本例中的变量X是一个单元格。但是我需要一个数组,比如,[6-1;56-1]X1,1=6;X1,2=-1;X2,1=5;X2,2=6;X2,3=-1@如果你是这个意思,请不要忘记编辑问题中类似的相同行@Pramit-MATLAB无法处理参差不齐或不均匀的矩阵。所有行的列数必须相同。解决这个问题的一种方法是将那些未定义的条目替换为零。另一种方法是使用一个单元格数组,其中每个单元格都是一个1D数组,它定义了每行的列。我已经改变了问题。