65.9K
CodeProject 正在变化。 阅读更多。
Home

EasyData – 简单快速地处理数据

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.36/5 (8投票s)

2005年4月12日

4分钟阅读

viewsIcon

49776

downloadIcon

290

这段代码展示了一种非常简单的数据处理方法,使用了 XML 序列化器,以及 ArrayList 的一些小技巧。

引言

我将尝试解释(如果我的英语允许的话)我目前处理数据的方式,特别是当我需要尽可能快地完成设计-创建-填充-保存和加载数据时。如果你没有时间或不想使用 SQL Server 或 Access 数据库,我会觉得这是一种不错的方法。在文章中,我将解释一些我们实现目标所需的重要主题,如何创建我们可以称之为 DataClass 的东西,序列化/反序列化工具(它包含在 VB 中!),以及关于数组序列化的一个技巧。有了这些,我们就可以实现 EasyData 的功能。

背景

很久以前,我来这里寻找关于 XML 保存的代码,在序列化我的类时遇到了一些问题。我很快发现 XML 序列化器 **不** 支持 `ArrayList`。现在怎么办?我想在不复杂的情况下保存我的数据,并以一种容易“记住”的模式保存(这就是我选择 XML 的原因),但我不想失去 `ArrayList` 在数据世界新手眼中提供的巨大便利。这就是 EasyData 的开始。

使用代码

让我们从头开始。第一步是创建一种简单快速的数据处理方法。我发现 `ArrayList` 非常有用且简单。让我们看看这两个类

'This is the main class
Public Class EasyData
    'create an Table-ArrayList
    Private Table As New ArrayList
End Class

'This is the data class
Public Class SingleData
    'here you can insert as many fields as you want.
    Public FirstInfo As String
    Public SecondInfo As String
    Public ThirdInfo As String
End Class

解释:`SingleData` 类是我们实际插入数据的地方。`EasyData` 类是所有乐趣的所在。由于 `Table` 是一个 `ArrayList`,因此可以轻松地向其中添加和删除对象。无需连接,无需开始/结束读取。结果是它成为一种非传统的管理大量数据的方式。(好吧,如果你考虑的是 1000K 行,请考虑 SQL 或 Access!)

    'Return the item x from the table
    Public Function Item(ByVal x As Short) As SingleData
        Return Table.Item(x)
    End Function
    
    'Return how many items are into the table
    Public Function Count() As Short
        Return Table.Count
    End Function
    
    'Add one item to the array
    Public Sub Add(ByVal SD As SingleData)
        Table.Add(SD)
    End Sub
    
    'Remove item from the array
    Public Sub Remove(ByVal SD As SingleData)
        Table.Remove(SD)
    End Sub

我发现 `Add`、`Remove`、`Count` 和 `Item` 函数足以管理数据。

保存技巧

所以我们创建了一个表,可以处理数据。然后呢?如何保存信息?

这是我当时的问题,我在这里找到了几篇关于如何在 VB.NET 中序列化类的有趣文章,以及一篇关于“XML 数据文件、XML 序列化和 .NET”的总体概述。然后就是经典的 Ctrl+C 和 Ctrl+V。结果……它不起作用。`ArrayList` 的优点是,你不需要设置数组大小,也不需要担心数据在其中存储的方式。对于初学者或快速数据应用程序来说,这很棒,但由于它“没有”大小也没有内部顺序,所以我们无法对其进行序列化。然后我得到了一个简单的想法。好吧,当我想处理数据时,我将使用 `ArrayList`,在保存时,我将使用一个普通的向量,然后在一个 XML 文件中进行序列化。

为了保持一些学习的方面,我将保存/加载和转换的功能分离到一个类中:`FileFunction`。这是程序的主要方面

图 2 - 保存过程概述(加载过程类似)。

    'convert the Table-ArrayList into one vector SingleData()
    Function ArrayToList(ByVal Table As ArrayList) As SingleData()
        Dim i As Short
        Dim p(Table.Count) As SingleData
        For i = 0 To ed.Count - 1
            p(i) = ed.Item(i)
        Next
        Return p
    End Function

这里是我们图 2 中显示的“已实现的功能”。该函数很简单,它接收一个 `ArrayList` 并使用 `Table.Count` 创建一个 `SingleData` 向量 `p`。然后,我们只需要用 `Array` 中的数据填充向量。

    'Get one Table-ArrayList and save it into one xml file 
    Public Sub Save(ByVal filename As String, ByVal ED As ArrayList)
        Dim SD() As SingleData
        SD = ArrayToList(ED)
        Dim serializer As New XmlSerializer(SD.GetType)

        ' Create an XmlSerializerNamespaces object.
        Dim ns As New XmlSerializerNamespaces
        ' Create an XmlTextWriter using a FileStream.
        Dim fs As New FileStream(filename, FileMode.Create)
        Dim writer As New XmlTextWriter(fs, New UTF8Encoding)
        ' Serialize using the XmlTextWriter.
        serializer.Serialize(writer, SD, ns)
        writer.Close()
    End Sub

这是保存过程。很简单。如果你有任何疑问,也许先看一下“XML 数据文件、XML 序列化和 .NET”会有很大帮助。但主要工作很简单。该函数接收 Table-`ArrayList` 并使用 `ArraytoList` 函数创建一个完全相同的副本,但以 `Vector` 的形式,这样就不会再有问题了。我们创建一个负责序列化的对象和一个负责创建 XML 文件的写入器。

加载过程与保存过程相同,我认为我不需要解释,因为它确实很简单,并且在源代码中已经注释了。

演示项目数据处理

在演示中,我做了一种简单的数据处理方法。这里的规则是保持简单。我添加了一些文本框来输入数据,还有一个列表框来可视化数据。另外四个按钮只是 Add、Delete、Save 和 Load。

关注点

有些人可能会认为这段代码完全没用,我可能同意你的观点,但它确实节省了很多时间,而且最重要的是,我从中学到了很多!这很有趣!

还需要大量的改进。也许第一件事是速度,也许是改变一些功能。一旦我有了新的东西,我会编辑这个话题。

如果你们中的任何人对这个项目进行了改进,请发送电子邮件给我 rmaax@ig.com.br。我很高兴看到有人也喜欢这个疯狂的东西。

哦,而且它目前几乎可以用于处理电话号码或电子邮件数据。

历史

第一个版本上线。

© . All rights reserved.