【问题标题】:What object to hold a large amount of text in?什么对象可以容纳大量文本?
【发布时间】:2011-10-05 20:02:14
【问题描述】:

我正在计划一个 Seaside 应用程序来保存文本,单个实例可能高达 5Mb。什么样的物体最适合这个?

我还想对该文本进行一些迭代。

谢谢,文斯

编辑:感谢您迄今为止的回复。该文件是一个 CSV 文件,需要大约 40 分钟才能从旧财务系统生成,因此必须预先生成和存储。每一行都是客户记录,我需要在客户登录时提取每一行并使用这些值。客户访问是不可预测的,与遗留系统交互以动态生成每一行是最后的手段。

【问题讨论】:

  • 有什么理由可以排除String吗?
  • 更具体地说明文本中的内容您打算如何处理?为什么是 5Mb?

标签: smalltalk pharo seaside


【解决方案1】:

鉴于生成文件需要很长时间,并且您稍后需要或多或少地随机访问文件,我会选择解析文件并将结构化数据保存在内存中。

您可以使用 Squeaksource 上的 CSV Parser 项目。它将创建您可以使用的 CSV 记录的结构化对象树。

【讨论】:

  • 我会试试这个。感谢您的帮助。
  • 我们最近使用了这个包并对其进行了一些修复。但是,我们无法上传它们,因为我们无法联系项目管理员。如果您遇到问题,请告诉我,我可以将最新版本发送给您。
  • 你好约翰。我试了一下,删除了不推荐使用的选择器并更新了语法,但我因 UTF8 编码问题而停了下来; “错误:检测到无效的 utf8 输入”。我想尝试您的更改,并将其作为单独的问题/答案发布,以便其他人可能会发现它有用。文斯
  • 您可能只需要使用不同的流,因为您的文件不会采用 utf8 编码。查看 TextConverter 类。我目前正在寻找在不同的存储库中发布 CSV 包。
  • 嗨。是的,谢谢,我已经下载了。再次感谢约翰的出色工作。文斯
【解决方案2】:

使用外部文本文件和特定类的一些实例作为该文件的表示。使用对象的oop作为文件名。

【讨论】:

  • 请注意,虽然 Squeak asOOp 会返回非唯一的 12 位对象哈希。
【解决方案3】:

正如 Johan 所说,只需使用一组客户,然后从 CSV 中填写。根据您的访问需求,您可以使用 Dictionary 或 OrderedCollection 来保存它。

【讨论】:

    【解决方案4】:

    5 兆是什么。不用担心。

    如果您不能将这些 CSV 记录具体化为对象(在解析和实例化它们之后),那么字符串集合甚至流就可以了。

    如果您需要键控查找,那么 Dictionary 或 LookupTable 就可以完成这项工作。

    我在内存中有 100 兆的文本数据(1 百万行),甚至可以毫无问题地保存在图像中(图像保存)。

    问候。

    【讨论】:

      猜你喜欢
      • 2011-06-08
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2016-08-11
      • 1970-01-01
      相关资源
      最近更新 更多