方法: 区切りファイルのフィールドの順序を変更する (LINQ) (Visual Basic)How to: Reorder the Fields of a Delimited File (LINQ) (Visual Basic)

コンマ区切り (CSV) ファイルは、テキスト ファイルです。多くの場合、行と列で表されるスプレッドシート データや他の表形式データの格納に使用されます。A comma-separated value (CSV) file is a text file that is often used to store spreadsheet data or other tabular data that is represented by rows and columns. Split メソッドを使用してフィールドを区切ると、LINQ を使用した CSV ファイルのクエリと操作がとても簡単になります。By using the Split method to separate the fields, it is very easy to query and manipulate CSV files by using LINQ. この手法は、CSV ファイルに限らず、行が構造化されているテキストの一部を並べ替えるときに利用できます。In fact, the same technique can be used to reorder the parts of any structured line of text; it is not limited to CSV files.

次の例では、学生の "名"、"姓"、"ID" を表す 3 つの列があります。In the following example, assume that the three columns represent students' "last name," "first name", and "ID." これらのフィールドは、学生の姓に基づいてアルファベット順に並べられています。The fields are in alphabetical order based on the students' last names. クエリによって、ID 列が最初に表示され、学生の姓と名を結合して 2 列目に表示されるように列順を変えます。The query produces a new sequence in which the ID column appears first, followed by a second column that combines the student's first name and last name. 行は ID フィールドの順に並べ替えられます。The lines are reordered according to the ID field. 結果は新しいファイルに保存され、元のデータは変更されません。The results are saved into a new file and the original data is not modified.

データ ファイルを作成するにはTo create the data file

  1. 次の行を、spreadsheet1.csv というプレーン テキスト ファイルにコピーします。Copy the following lines into a plain text file that is named spreadsheet1.csv. プロジェクト フォルダーにファイルを保存します。Save the file in your project folder.

    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
    

Example

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

関連項目See also