2013-04-25 4 views
0

У меня есть набор .txt файлов с именем: table.iterations.txt где iterations = 1:10000 (так table.01.txt, table.02.txt, table.1001.txt и т.д., размер каждого файла ниже, чем 2Кб). Каждый TXT файл содержит значение, целые числа без знаков после запятой в разных строках p.e .:Matlab: читать и вычислить процент значений встречаемости из текстовых файлов

table.01.txt table.02.txt ... table.1001.txt 
2    5    32 
5    19    37 
19    45    58 
52    88    62 
62    89    75 
95        80 
99        88 
           100 

Каждый текстовый файл может содержать различное число значений, где 0<value<101.

Мне нужна помощь по чтению всех этих файлов, чтобы найти процент появления его значения во всех файлах txt. В приведенном выше примерном примере значение 2 присутствует один раз, значение 5 два раза, значение 100 один раз и т. Д.

Заранее спасибо.

+0

Сделайте снимок, сделав это для одного файла и разместите свой код? Затем просмотрите файл 'dir (*. Txt)' http://www.mathworks.com/help/matlab/ref/dir.html для чтения всех файлов. Я предлагаю вам создать массив, называемый вхождениями длиной 102 элемента, а затем каждый раз, когда вы сталкиваетесь с numner 'n', вы просто« вхождения »(n + 1) = вхождения (n + 1) + 1' – Dan

+3

Как только все числа загружаются в переменная, '[histc (X, unique (X)), unique (X)]' даст вам гистограмму вхождений. Преобразование в процентах должно быть легким оттуда – user1207217

+1

Из [обрабатывать список файлов с определенным именем расширения в Matlab] (http://stackoverflow.com/a/7293443/2180721) – Oleg

ответ

1

Из комментариев, согласно this post:

dirName = 'C:\yourpath';       %# folder path 
files = dir(fullfile(dirName,'table.*.txt')); %# list all *.txt files, make sure you have only the txt's you are interested on inside selected path 
files = {files.name}';        %# file names 
data = cell(numel(files),1);      %# store file contents 
for i=1:numel(files) 
    fname = fullfile(dirName,files{i});   %# full path to file 
    values{i}=load(fname);       %# load values from txt to variable 
    data{i} = histc(values{i},1:100);    %# find occurences, for max value =25 change 100 to 25 
end 

thestructdata=[data{:}];       %# convert to matrix 
for j2=1:size(thestructdata,1) 
    occ(j2,:)=histc(thestructdata(j2,:),1);  %# find the number of occurence, 1 is present, on each line on all txt files 
end 
occ=[occ]';          %# gather results to an array 
occperce=occ(1,:)./numel(files)*100    %# results in percentage, max value = 25, change to 100 if needed as the OP question 

Результаты (для максимального значения 25-значения):

occ =  
    14 11 10 12 13 15 11 10 11 10  7 14 11 12 11 13  7 11 10 12 14 12 13 14 11 


occperce = 

    Columns 1 through 20 

    56.0000 44.0000 40.0000 48.0000 52.0000 60.0000 44.0000 40.0000 44.0000 40.0000 28.0000 56.0000 44.0000 48.0000 44.0000 52.0000 28.0000 44.0000 40.0000 48.0000 

    Columns 21 through 25 

    56.0000 48.0000 52.0000 56.0000 44.0000 

Если вы хотите, вы можете удалить все текстовые файлы делают это: delete(dirName,'table.*.txt');

Смежные вопросы