Отдельные символы файла в Matlab

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

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

00000000000FDAD000DFD00ASD00

00000000000FDAD000DFD00ASD00

00000000000FDAD000DFD00ASD00

....

и в новом файле я хочу, чтобы они выглядели так:

0000 0000 000F DAD0 00DF D00A SD00

0000 0000 000F DAD0 00DF D00A SD00

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


person Paolo Lamprou    schedule 24.05.2013    source источник
comment
Поскольку вы работали над этим в течение некоторого времени, пожалуйста, покажите нам, какой код у вас уже есть, и объясните, что он делает неправильно.   -  person David Gorsline    schedule 24.05.2013
comment
У вас есть новая строка, разделяющая каждую строку?   -  person Oleg    schedule 24.05.2013
comment
Обратите внимание, что в вашем примере указано 28 символов, а не 32.   -  person Oleg    schedule 25.05.2013


Ответы (3)


импорт

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

Преобразуйте в массив M на 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);
person Oleg    schedule 24.05.2013

Сначала откройте входной файл и прочитайте строки как строки:

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);

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

person Eitan T    schedule 24.05.2013
comment
Мне особенно нравится, что (?!$) не совпадает, если в конце! - person Oleg; 25.05.2013

Вот один из способов сделать это в 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);
person Molly    schedule 24.05.2013