10

我需要分析数万行数据。数据是从文本文件中导入的。每行数据有八个变量。目前,我使用一个类来定义数据结构。在阅读文本文件时,我将每个行对象存储在一个通用列表 List 中。

我想知道是否应该切换到使用关系数据库 (SQL),因为我需要分析每一行文本中的数据,试图将其与我目前也存储在通用列表 (List) 中的定义术语相关联。

目标是使用定义翻译大量数据。我希望定义的数据是可过滤的、可搜索的等。我越想越觉得使用数据库越有意义,但我想在进行更改之前与更有经验的开发人员再次确认(我使用的是结构和首先是数组列表)。

我能想到的唯一缺点是数据在用户翻译和查看后不需要保留。不需要永久存储数据,因此使用数据库可能有点矫枉过正。

4

7 回答 7

3

去数据库不是绝对必要的。这取决于数据的实际大小和您需要执行的过程。如果您使用自定义类将数据加载到 List 中,为什么不使用 Linq 进行查询和过滤呢?就像是:

var query = from foo in List<Foo>
            where foo.Prop = criteriaVar
            select foo;

真正的问题是数据是否太大以至于不能舒适地加载到内存中。如果是这样的话,那么是的,数据库会简单得多。

于 2010-02-28T01:28:39.197 回答
3

这不是大量的数据。我认为没有任何理由在您的分析中涉及数据库。

C# 中内置了一种查询语言——LINQ。原始海报目前使用对象列表,因此真的无事可做。在我看来,这种情况下的数据库会增加热量而不是光线。

于 2010-02-28T03:01:37.857 回答
1

听起来你想要的是一个数据库。Sqlite支持内存数据库(使用 ":memory:" 作为文件名)。我怀疑其他人也可能有内存模式。

于 2010-02-28T01:11:39.183 回答
1

当我在以前的公司工作时,我遇到了与您现在面临的同样的问题。问题是我正在为很多条码生成的文件寻找一个具体而好的解决方案。条码生成一个包含数千条记录的文本文件在一个文件中。起初操作和呈现数据对我来说非常困难。根据我编程的记录,我创建了一个类来读取文件并将数据加载到数据表中并能够将其保存在数据库。我使用的数据库是SQL server 2005。然后我可以轻松管理保存的数据并以我喜欢的方式呈现它。要点是从文件中读取数据并将其保存到数据库中。如果你这样做因此,您将有很多选择以您喜欢的方式进行操作和呈现。

于 2010-02-28T02:39:31.457 回答
0

如果您不介意使用访问权限,您可以执行以下操作

附加一个空白 Access db 作为资源 需要时,将 db 写入文件。运行处理数据列的 CREATE TABLE 语句 将数据导入新表 使用 sql 运行计算 OnClose,删除该访问数据库。

您可以使用 Resourcer 之类的程序将 db 加载到 resx 文件中

  ResourceManager res = new ResourceManager( "MyProject.blank_db", this.GetType().Assembly );
  byte[] b = (byte[])res.GetObject( "access.blank" );

然后使用以下代码将资源拉出项目。获取字节数组并使用临时文件名将其保存到临时位置

“MyProject.blank_db”是资源文件的位置和名称 “access.blank”是分配给要保存的资源的选项卡

于 2010-02-28T01:18:51.093 回答
0

如果您唯一需要做的就是搜索和替换,您可以考虑使用 sed 和 awk,并且可以使用 grep 进行搜索。当然是在 Unix 平台上。

于 2010-03-11T00:04:11.537 回答
0

根据您的描述,我认为 linux 命令行工具可以很好地处理您的数据。使用数据库可能会不必要地使您的工作复杂化。如果您使用的是 Windows,这些工具也可以通过不同的方式获得。我会推荐cygwin。以下工具可能涵盖您的任务:sort、grep、cut、awk、sed、join、paste。

这些 un​​ix/linux 命令行工具对 Windows 用户来说可能看起来很吓人,但人们喜欢它们是有原因的。以下是我爱他们的理由:

  1. 它们使您的技能得以积累-您对部分工具的了解可以在未来的不同任务中有所帮助。
  2. 它们使您的努力得以积累 - 您用于完成任务的命令行(或脚本)可以根据需要使用不同的数据重复多次,无需人工干预。
  3. 它们通常优于您可以编写的相同工具。如果您不相信,请尝试使用您的 TB 文件版本击败排序。
于 2010-03-11T00:45:45.823 回答