2010-10-14 3 views
3

Я знаю, что это часто спрашивают, но поиск в Google не дает окончательного ответа Mathematica, поэтому я подумал, что было бы полезно иметь это на StackOverflow.Каков наилучший способ обрезать содержимое файла в строку в Mathematica?

Я делал это с помощью Импорта, но мне пришло в голову, что это может быть ужасно неэффективным, Импорт является такой тяжеловесной функцией.

Таким образом, вопрос, вы можете улучшить следующее:

slurp[filename_] := Import[filename, "Text"] 
+0

Непосредственно связанный с вашим вопросом производительности, но несколько раз мне нужно было обрабатывать данные XML, а файлы справки были бесполезны. Я нашел это, если кому-то это понадобится http://www.hostsrv.com/webMathematica/Resources/Documentation/English/indexE_5_1.html. Я планирую опубликовать вопрос сообщества для создания индекса ресурсов Mathematica. Там много, но слишком разбросано. –

ответ

2

Для импорта весь файл сразу, только другой вариант, который я знаю это ReadList. Это может быть уговорил возвращения весь файл в виде одной строки следующим образом :

In[1]:= ReadList["ExampleData/source", Record, RecordSeparators -> {}] 
Out[1]:= {"f[x] (: function f :)\r\ng[x] (: function g :)\r\n"} 

(Примечание:. \ Г и \ п фактически интерпретированы в выходной, но я оставил их в для удобства чтения) Ключ должен удалить любые RecordSeparators. Но, честно говоря, я не думаю, что это вас сэкономит, а Import[ <file>, "Text"] проще написать. Честно говоря, я использую Read[ <file>, String], когда у меня есть данные в формате, который не покрывается спецификаторами типов, используемыми в Read и ReadList, и создайте пользовательскую функцию вокруг этой операции для загрузки во все данные.


  1. Вы можете найти это в Reading Textual Data tutorial.
+0

Import [file, "String"] использует этот синтаксис ReadList [] для вставки файла. Скорость мудрая, они должны быть очень похожи. Формат «Текст» заканчивает нормализацию строки и, возможно, обрабатывает кодировки символов. –

+0

@ Joshua, не увидев сам код, я подозреваю, что вы правильно относитесь к их относительной скорости. При этом синтаксис «Импорт» для загрузки целого файла в строку намного проще, поэтому менее вероятно, что ошибки будут введены через его использование. С другой стороны, мои данные часто структурированы, но не так, как обрабатываются «Импорт», «Чтение» или «ReadList». Итак, я стараюсь разбирать файлы, когда я иду, в отличие от загрузки их сразу, а затем разбора. – rcollyer

+0

Ваше использование 'Read' и' ReadList' звука очень разумно. Они оба берут списки типов данных (например, структуры), которые также могут оказаться полезными. То же самое для их двоичных копий. –