2013-12-12 2 views
0

Я знаю, что fread может использоваться для чтения двоичных данных. Я где-то читал, что он также может читать текстовые файлы. У меня есть текстовый текстовый файл, который я сгенерировал с помощью утилиты BCP и SQL Server. Я пытаюсь прочитать эти огромные данные в Matlab. textscan и fscanf медленны в моем случае. fread считывает данные и выводит их значения ASCII. Есть ли способ, которым я могу правильно читать данные, используя fread? Поскольку текстовые файлы большие, fread может дать мне более быстрое решение.Чтение числовых текстовых файлов с использованием FREAD в MATLAB

BCP "SELECT 3,1 UNION ALL ВЫБРАТЬ 9,13" queryout "Trial.txt" -ct "" -S "SRVR" -U "для входа в" -Р "PWRD"

% в Matlab ->

fid = fopen('Trial.txt','r') ; 
    fread(fid) 
    fclose(fid); 

ASCII Вывод:

51     % Ascii Char for 3 (http://www.asciitable.com/) 
44     % ..............., 
49     % ...............1 
13     % ...............carriage return 
10 
57 
44 
....... 
+0

'fileread' должны делать тоже хорошо. В основном это простой вызов 'fread' ... Если вы проверите' doc fread', вы увидите, что fread поддерживает множество вариантов преобразования. – sebastian

ответ

0

вы пробовали это:

s = regexp(fileread('Trial.txt'), '(\r\n|\n|\r)', 'split'); 

или вы можете использовать:

fread(fid,'*char') 
+0

Спасибо. Как упоминалось выше, он имеет худшие проблемы с производительностью. В этом случае мне лучше использовать fscanf. – Maddy

0

У вас его почти нет. Просто используйте char после fread, чтобы интерпретировать прочитанные байты как символы ASCII. Кроме того, добавить .' если вы хотите вектор-строку вместо вектора-столбца:

fid = fopen('Trial.txt','r'); 
chars = char(fread(fid)).'; 
fclose(fid); 
+0

-> Спасибо. Любое преобразование str2num зависает на моем ПК. Это не приемлемое решение при использовании больших файлов. – Maddy

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