Добавьте двойной пробел в качестве разделителя

У меня есть огромное количество больших текстовых файлов, которые нужно переформатировать, чтобы их можно было прочитать с помощью FEAT (программы анализа МРТ). FSL читает текстовые файлы с двойным пробелом в качестве разделителя. Я использую Matlab, чтобы добавить строку информации, которая мне нужна, в текстовые файлы, и я пытаюсь заставить ее экспортировать полученный массив в виде текстового файла с двойным разделителем пробелов, но я не могу понять, как сделай это. dlmwrite позволяет использовать в качестве разделителей только одиночные символы.

Есть идеи?


person Angus Campbell    schedule 11.11.2015    source источник
comment
Из этого вопроса не совсем понятно, что происходит... Каков точный тип данных в MATLAB, который вы пытаетесь записать в текстовый файл с двойным пробелом? Вам просто нужно вывести матрицу действительных двойников?   -  person Matthew Gunn    schedule 11.11.2015
comment
Итак, я беру текстовый файл с числами, использую dlmread для преобразования их в числовой массив, затем изменяю массив и использую dlmwrite для измененного массива, чтобы снова вывести его в виде файла .txt. Я застрял, потому что не мог понять, как заставить dlmwrite выводить двойной пробел, но я только что понял, что могу просто использовать запятую в качестве разделителя, а затем ctrl-f заменить все запятые двойным пробелом в текстовом файле. сам.   -  person Angus Campbell    schedule 12.11.2015
comment
Гораздо проще, чем я думал.   -  person Angus Campbell    schedule 12.11.2015


Ответы (1)


Вы можете использовать свою собственную версию dlmwrite. Например:

function my_dlmwrite(filename, m, delimiter_string, sigfigs)
if(~ischar(delimiter_string))
    error('delimiter string should be a string');
end
if(~isnumeric(m) || ~(isreal(m)))
    error('matrix should be a real matrix of doubles')
end
if(~isscalar(sigfigs))
    error('the number of significant figures to print should be a scalar');
end
if(sigfigs < 5)
    warning('do you really want fewer than 5 significant significant digits?');
end        

fid = fopen(filename ,'W');  %open for writing and dont flush for better performance

[n_rows, n_cols] = size(m);

for(i=1:n_rows)
    fprintf(fid, '%.*g', sigfigs, m(i, 1));        
    for(j=2:n_cols)
        fprintf(fid, '%s%.*g', delimiter_string, sigfigs, m(i, j));
    end
    fprintf(fid,'\n');
end

fclose(fid);
person Matthew Gunn    schedule 11.11.2015