2008-11-03 40 views
7

Hãy xem xét các hồ sơ sauĐọc các giá trị văn bản vào các biến matlab từ các tập tin ASCII

var1 var2 variable3 
1  2 3 
11 22 33 

Tôi muốn tải các số vào một ma trận, và các tiêu đề cột vào một biến đó sẽ là tương đương với:

variable_names = char('var1', 'var2', 'variable3'); 

Tôi không ngại chia nhỏ tên và số trong hai tệp, tuy nhiên việc chuẩn bị tệp mã MATLAB và đánh giá chúng không phải là một tùy chọn.

Lưu ý rằng có thể có một số tùy biến (cột)

Trả lời

9

Tôi đề nghị IMPORTDATA cho các hoạt động như thế này:

d = importdata('filename.txt'); 

Sự trở lại là một struct với các trường số trong một thành viên được gọi là 'data', và các tiêu đề cột trong một trường có tên 'colheaders'.

Một giao diện hữu ích khác để nhập thao tác dữ liệu như thế này là lớp 'dataset' có sẵn trong Hộp công cụ thống kê.

1

Chỉ cần sử dụng textscan với specifiers định dạng khác nhau.

fid = fopen(filename,'r'); 
heading = textscan(fid,'%s %s %s',1); 
fgetl(fid); %advance the file pointer one line 
data = textscan(fid,'%n %n %n');%read the rest of the data 
fclose(fid); 

Trong trường hợp này 'tiêu đề' sẽ là mảng ô chứa mỗi ô bên trong, vì vậy bạn sẽ phải thay đổi chúng thành chuỗi ô hoặc bất kỳ thứ gì bạn muốn. 'dữ liệu' sẽ là một mảng ô có chứa một mảng số cho mỗi cột mà bạn đọc, vì vậy bạn sẽ phải liên kết chúng với nhau để tạo một ma trận.

+0

Có thể có một số lượng tùy ý các biến (cột) –

+0

Nếu bạn không biết số cột trước thì bạn sẽ phải đọc từng dòng một tập tin. Nếu bạn gọi textcan với một% s và không có số giới hạn, nó sẽ đọc N số chuỗi từ dòng. Tôi nghĩ rằng điều này là tốt hơn/nhanh hơn so với sử dụng strtok. –

3

Nếu tiêu đề là trên hàng đầu tiên sau đó

A = dlmread(filename,delimString,2,1); 

sẽ đọc dữ liệu số vào Matrix A.

Sau đó, bạn có thể sử dụng

fid = fopen(filename) 
headerString = fscanf(fid,'%s/n') % reads header data into a string 
fclose(fid) 

Sau đó bạn có thể sử dụng strtok để chia headerString thành một mảng ô. Là một trong những cách tiếp cận tôi có thể nghĩ đến thỏa thuận với một số không rõ các cột

Sửa

fscanf cố định chức năng gọi

Các vấn đề liên quan