Tôi đã viết tập lệnh lưu đầu ra của nó vào tệp CSV để tham khảo sau này, nhưng tập lệnh thứ hai để nhập dữ liệu mất một khoảng thời gian vô hạn để đọc lại.Cách nhanh nhất để nhập tệp CSV trong MATLAB
các dữ liệu có định dạng sau:
Item1,val1,val2,val3
Item2,val4,val5,val6,val7
Item3,val8,val9
nơi các tiêu đề là trên cột bên trái nhất, và các giá trị dữ liệu mất thời gian còn lại của hàng. Một khó khăn lớn là mảng các giá trị dữ liệu có thể có độ dài khác nhau cho từng mục kiểm tra. Tôi muốn lưu nó như là một cấu trúc, nhưng tôi cần để có thể chỉnh sửa nó bên ngoài môi trường MATLAB, vì đôi khi tôi phải xóa các hàng dữ liệu xấu trên một máy tính không được cài đặt MATLAB. Vì vậy, thực sự, một phần của câu hỏi của tôi là: Tôi có nên lưu dữ liệu ở định dạng khác không?
Phần thứ hai của câu hỏi: Tôi đã thử importdata, csvread và dlmread, nhưng tôi không chắc cái nào là tốt nhất hoặc nếu có giải pháp tốt hơn. Hiện tại, tôi đang sử dụng tập lệnh của riêng mình bằng cách sử dụng vòng lặp và fgetl, tốc độ này rất chậm đối với các tệp lớn. Bất kỳ đề xuất?
function [data,headers]=csvreader(filename); %V1_1
fid=fopen(filename,'r');
data={};
headers={};
count=1;
while 1
textline=fgetl(fid);
if ~ischar(textline), break, end
nextchar=textline(1);
idx=1;
while nextchar~=','
headers{count}(idx)=textline(1);
idx=idx+1;
textline(1)=[];
nextchar=textline(1);
end
textline(1)=[];
data{count}=str2num(textline);
count=count+1;
end
fclose(fid);
(Tôi biết mã lẽ là khủng khiếp bằng văn bản này - Tôi là một kỹ sư, không phải là một lập trình viên, xin đừng la mắng tôi -. Bất kỳ đề xuất cải tiến sẽ được hoan nghênh, mặc dù)
+1 để giới thiệu strtok - Tôi không biết nó tồn tại trước – Doresoom