Importing multiple .txt files containting single colums of numerical data

1 回表示 (過去 30 日間)
Ross
Ross 2013 年 1 月 4 日
I'm trying to import multiple .txt files, up to 100 at a time. The files are named in a fashion like 'test_1.txt, test_2.txt'... etc. These .txt files simply contain a 1024 long column of integers. I'm hoping that I can get some code such that I can import all of these files at once, and obtain a variable for each imported file, which will have a suitable name, such as 'test_1' 'test_2' etc. The purpose of this is to perform analysis on each of these sets of data, so first, would it be better to import them into one matrix, with each column or row representing a separate test file, or would my suggestion of separate variables be better suited?
I found the following code somewhere online, and it almost gives me what I want.
datafiles = dir('*.txt');
filename = cell(length(datafiles),1);
data = cell(length(datafiles),1);
for k = 1:length(datafiles)
filename{k} = datafiles(k).name;
data{k} = importdata(filename{k});
end
The result is a 100x1 cell, where each element within the cell is a 1024x1 double; I am not sure if this is a good format for me to do further analysis. How can I alter the code to get the best result I am looking for?
Many thanks.

採用された回答

Davide Ferraro
Davide Ferraro 2013 年 1 月 4 日
Hi Ross,
it depends on the type of analyses you need to do. If you are not expert working directly with cell array using command such as CELLFUN you may like to transform this variable into a standard matrix. By using the command CELL2MAT:
data_matrix = cell2mat(data);
you should be able to get a single matrix. In order to get the matrix with each variable in a column a transposition may be needed in your case:
data_matrix = cell2mat(data');
At this point you can use statistical operator directly on the matrix. In example:
mean_values = mean(data_matrix);
will compute the mean of each individual column. This makes your code faster, shorter and simpler. I would avoid getting 100 different variables, you will get crazy in automatically process all of them with complex loops and EVAL instructions.
  4 件のコメント
Ross
Ross 2013 年 1 月 4 日
編集済み: Ross 2013 年 1 月 4 日
Sounds perfect. The result of my code plus the line you suggested means my data is in rows, not columns, but that's not an issue. Thanks again for the help.
EDIT: Scrap that, it does produce the data in columns. I'm a bit rusty with MATLAB.
Ross
Ross 2013 年 1 月 4 日
I've come across a problem. As mentioned before, my files are named "TRIAL1__1.txt, TRIAL1__2.txt' up to 'TRIAL1__100.txt'. Using the previously mentioned code, it imports 'TRIAL1__1.txt' then 'TRIAL1__10.txt' then 'TRIAL1__100.txt' instead of the correct order. I could manually sort this with some code, but not all of my data sets are only 100 files, so is there a simple way to fix this?

サインインしてコメントする。

その他の回答 (1 件)

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 1 月 4 日
編集済み: Azzi Abdelmalek 2013 年 1 月 4 日
for k=1:100
data{k}=dlmread(sprintf('test_%d.txt',k))
end
  4 件のコメント
Ross
Ross 2013 年 1 月 4 日
編集済み: Ross 2013 年 1 月 4 日
They are in the correct folder. I get a list of the 100 files. Still no luck. This solution looks like it would solve the problem I having on the other answer on this page, where the order of the filenames generated by
dir('*.txt')
is incorrect. I get 1, 10, 100, 11, 12 etc.
Ross
Ross 2013 年 1 月 4 日
Sorry for the multiple posts, but I got it working. Used the code you suggested but importdata instead of dlmread. Thanks for the pointers!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeOther Formats についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by