编码包的一个令人讨厌的事情是它们必须位于单独的文件中。如果我们想要分发一个简单的自包含app(编码),我们需要提供两个文件:app“interface”和app包。
如果我将编码文件的所有内容放在字符串中,并将该字符串转换为InputStream,那么我将该包内容视为文件的一半。
但是Get,据我所知,这是唯一具有解码功能的操作(也被Needs使用),不适用于Streams。它只适用于真实文件。
有人能找到一种获取流的方法吗?
答案 0 :(得分:6)
等待Mathematica到达我的iPhone所以无法测试任何东西,但为什么不把字符串写入临时文件并获取?
更新
以下是如何操作:
encoded = ToFileName[$TemporaryDirectory, "encoded"];
Export[encoded, "code string", "Text"]; (*export encrypted code to temp file *)
使用ASCII编辑器从包含编码代码的ASCII文件中复制代码字符串的内容非常重要,并将其粘贴到现有的空引号(“”)之间。然后,Mathematica将自动转义代码中可能出现的反斜杠和引号。此文件已使用Encode
提前完成。不能在示例代码中这样做,因为SO的Markdown与字符串混杂。
Get[encoded] (* get encrypted code and decode *)
DeleteFile[encoded] (* Remove temp file *)
Get
似乎不是解码所必需的。 ImportString
也有效:
ImportString["code string", "NB"]
如上所述,将编码的tekst从ASCII编辑器直接粘贴到“”之间,然后让MMA进行转义。
答案 1 :(得分:3)
我不知道如何获取Stream,但您可以将编码数据存储在单个包中,将其写入临时文件,然后使用Get读取临时文件。
答案 2 :(得分:0)
只是为了让事情保持最新:
自从V9.0开始, Get
与流一起使用。