在两个csv文件之间找到相同的行,并使用它们创建一个Matlab变量

在两个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和

我有两个带有数字数据的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和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数组,它定义了每行的列。我已经改变了问题。