如何:对带分隔符的文件(LINQ)(Visual Basic)的字段重新排序

逗号分隔值(CSV)文件是一个文本文件,通常用于存储电子表格数据或其他表格数据,这些表格数据由行和列表示。 通过使用Split方法分隔字段,使用 LINQ 查询和操作 CSV 文件非常简单。 事实上,同一技术可用于重新排序任何结构化文本行的各部分:它不限于 CSV 文件。

在下面的示例中,假定这三列表示学生的“姓氏”、“名字”和“ID”。这些字段根据学生的姓氏按字母顺序排列。 该查询将生成一个新序列,其中 ID 列首先出现,后跟合并学生的名字和姓氏的第二列。 这些行根据 ID 字段重新排序。 结果将保存到新文件中,原始数据未修改。

创建数据文件

  1. 将以下行复制到名为 spreadsheet1.csv的纯文本文件中。 将文件保存到项目文件夹中。

    Adams,Terry,120
    Fakhouri,Fadi,116
    Feng,Hanying,117
    Garcia,Cesar,114
    Garcia,Debra,115
    Garcia,Hugo,118
    Mortensen,Sven,113
    O'Donnell,Claire,112
    Omelchenko,Svetlana,111
    Tucker,Lance,119
    Tucker,Michael,122
    Zabokritski,Eugene,121
    

示例:

Class CSVFiles

    Shared Sub Main()

        ' Create the IEnumerable data source.
        Dim lines As String() = System.IO.File.ReadAllLines("../../../spreadsheet1.csv")

        ' Execute the query. Put field 2 first, then
        ' reverse and combine fields 0 and 1 from the old field
        Dim lineQuery = From line In lines
                        Let x = line.Split(New Char() {","})
                        Order By x(2)
                        Select x(2) & ", " & (x(1) & " " & x(0))

        ' Execute the query and write out the new file. Note that WriteAllLines
        ' takes a string array, so ToArray is called on the query.
        System.IO.File.WriteAllLines("../../../spreadsheet2.csv", lineQuery.ToArray())

        ' Keep console window open in debug mode.
        Console.WriteLine("Spreadsheet2.csv written to disk. Press any key to exit")
        Console.ReadKey()
    End Sub
End Class
' Output to spreadsheet2.csv:
' 111, Svetlana Omelchenko
' 112, Claire O'Donnell
' 113, Sven Mortensen
' 114, Cesar Garcia
' 115, Debra Garcia
' 116, Fadi Fakhouri
' 117, Hanying Feng
' 118, Hugo Garcia
' 119, Lance Tucker
' 120, Terry Adams
' 121, Eugene Zabokritski
' 122, Michael Tucker

另请参阅