我有一个由N-by-M表组成的csv文件。 在第一列中每行由6个不同的数字组成,我需要检测是否有任何数字是相同的,然后打印错误消息 这就是我认为应该写的方式
valid=true(height(Information),1);
for i=1:height(Information),1;
if Information{i, 1} == Information{:, 1}
fprintf('Invalid number in line %d', i);
valid(i)=false;
end
end
答案 0 :(得分:1)
使用unique
和histcounts
的第三个输出:
% generate two matrices, one with 2 identical elements
A1 = rand(3);
A1(end,1) = A1(1);
A2 = rand(3);
% check identical elements
[~,~,ic] = unique(A1(:,1),'stable');
identicalNumbers = any(histcounts(ic,max(ic)) > 1) % true
[~,~,ic] = unique(A2(:,1),'stable');
identicalNumbers = any(histcounts(ic,max(ic)) > 1) % false
编辑它可以更简单地完成:
identicalNumbers = numel(ic) > max(ic)
答案 1 :(得分:0)
首先在名为A的矩阵中读取csv文件,然后尝试以下代码:
uniqueVals = unique( A(:,1) );% find unique values of col 1
[r c] = size(uniqueVals);% r determines the number of unique values in A(:,1)
[rr cc] = size(A);% rr is total number of values in A(:,1)
if (r~=rr)
disp('identical numbers detected');
end
答案 2 :(得分:0)
我修改了我的代码。以下代码检测第一列中的相同数字并告诉您索引:
A = randi (8,6)
uniqueVals = unique( A(:,1) );
[c r] = size(uniqueVals);
for i=1:c
[m n]= size(find(A(:,1) == uniqueVals(i)));
if m>1
disp('same values detected in rows: ')
find(A(:,1) == uniqueVals(i))
end
end
检查代码并给我反馈。
答案 3 :(得分:0)
我已在本地驱动器中下载了您的csv文件。运行代码并使用对话框选择csv文件。
clear
clc
[file_name, mach_path] = uigetfile( ...
{'*.csv', 'All CSV (*.csv)'}, ...
'Select File');
% If "Cancel" is selected then return
if isequal([file_name,mach_path],[0,0])
return
% Otherwise construct the fullfilename and Check and load the file
else
fileName = fullfile(mach_path,file_name);
end
fid = fopen(fileName,'r'); %# Open the file
lineArray = cell(100,1); %# Preallocate a cell array (ideally slightly
%# larger than is needed)
lineIndex = 1; %# Index of cell to place the next line in
nextLine = fgetl(fid); %# Read the first line from the file
while ~isequal(nextLine,-1) %# Loop while not at the end of the file
lineArray{lineIndex} = nextLine; %# Add the line to the cell array
lineIndex = lineIndex+1; %# Increment the line index
nextLine = fgetl(fid); %# Read the next line from the file
end
fclose(fid); %# Close the file
lineArray = lineArray(1:lineIndex-1); %# Remove empty cells, if needed
for iLine = 1:lineIndex-1 %# Loop over lines
lineData = textscan(lineArray{iLine},'%s',... %# Read strings
'Delimiter',',');
lineData = lineData{1}; %# Remove cell encapsulation
if strcmp(lineArray{iLine}(end),',') %# Account for when the line
lineData{end+1} = ''; %# ends with a delimiter
end
lineArray(iLine,1:numel(lineData)) = lineData; %# Overwrite line data
end
A = lineArray;
uniqueVals = unique( A(:,1) );
[cc ~] = size(uniqueVals);
for i=1:cc
[mm ~]= size(find(ismember(A(:,1),uniqueVals(i))));
if mm>1
second = find(ismember(A(:,1),uniqueVals(i)));
disp('same value detected in rows: ')
disp(second(2));
A(second(2),:) = [];
disp(A);
end
end