2013-05-24 2 views
0

У меня есть строки из 32 символов в файле (несколько строк). Что я хочу сделать, это создать новый файл и поместить его туда, создав столбцы по 4 символа.Отдельные символы файла в matlab

Например, у меня есть:

00000000000FDAD000DFD00ASD00 

00000000000FDAD000DFD00ASD00 

00000000000FDAD000DFD00ASD00 

.... 

и в новом файле, я хочу, чтобы выглядеть следующим образом:

0000 0000 000F DAD0 00DF D00A SD00 

0000 0000 000F DAD0 00DF D00A SD00 

Можете ли вы кто-нибудь мне помочь? Я работаю часами, и я не могу найти решение.

+5

Поскольку вы работаете над этим в течение некоторого времени, пожалуйста, покажите нам, какой у вас код до сих пор, и объясните, что он делает неправильно. –

+0

У вас есть новая линия, разделяющая каждую строку? – Oleg

+1

Обратите внимание, что ваш пример сообщает 28 символов, а не 32. – Oleg

ответ

0

Импорт

fid = fopen('test.txt'); 
txt = textscan(fid,'%s'); 
fclose(fid); 

Transform в М от 28 массив символов, транспонировать и изменить форму, чтобы иметь 4 обугленного блок на каждой колонке. Затем добавьте в нижнюю строку пробелы и измените форму обратно. Храните каждую строку в ячейке.

txt = reshape(char(txt{:})',4,[]); 
txt = cellstr(reshape([txt; repmat(' ',1,size(txt,2))],35,[])') 

Написать каждая клетка/линия новый файл

fid = fopen('test2.txt','w'); 
fprintf(fid,'%s\r\n',txt{:}); 
fclose(fid); 
0

Вот один из способов сделать это в Matlab:

% read in file 
fid = fopen('data10.txt'); 
data = textscan(fid,'%s'); 
fclose(fid); 

% save new file 
s = size(data{1}); 
newFid = fopen('newFile.txt','wt'); 
for t = 1:s(1) % format and save each row 
    line = data{1}{t}; 
    newLine = ''; 
    index = 1; 
    for k = 1:7 % seven sets of 4 characters 
     count = 0; 
     while count < 4 
      newLine(end + 1) = line(index); 
      index = index + 1; 
      count = count + 1; 
     end 
     newLine(end + 1) = ' '; 
    end 
    fprintf(newFid, '%s\n', newLine); 
end 
fclose(newFid); 
1

Во-первых, открыть входной файл и читать строки как строки:

infid = fopen(infilename, 'r'); 
C = textscan(infid, '%s', 'delimiter', ''); 
fclose(infid); 

Затем используют regexprep разбить строку в пространственно-разделенные группы по 4 символа:

C = regexprep(C{:}, '(.{4})(?!$)', '$1 '); 

Наконец, записи измененных строк в выходном файле:

outfid = fopen(outfilename, 'w'); 
fprintf(outfid, '%s\n', C{:}); 
fclose(outfid); 

Обратите внимание, что это решение является достаточно прочным, чтобы работать на линии переменной длины.

+1

Мне особенно нравится '(?! $)' Не совпадают, если в конце! – Oleg