Vb.net 从另一个CSV文件为CSV文件赋值

Vb.net 从另一个CSV文件为CSV文件赋值,vb.net,csv,for-loop,nested-loops,Vb.net,Csv,For Loop,Nested Loops,我有两个csv文件,其中包含10辆车和15名司机的日历。目标是加入两个日历 Car.csv看起来像这样 Car 1;A Car 2;A Car 3;I Car 4;A Car 5;A Car 6;I Car 7;A Car 8;A Car 9;Y Car 10;A Driver 1;V Driver 2;V Driver 3;Y Driver 4;A Driver 5;A Driver 6;V Driver 7;A Driver 8;I Driver 9;I Driver 10;V Drive

我有两个csv文件,其中包含10辆车和15名司机的日历。目标是加入两个日历

Car.csv看起来像这样

Car 1;A
Car 2;A
Car 3;I
Car 4;A
Car 5;A
Car 6;I
Car 7;A
Car 8;A
Car 9;Y
Car 10;A
Driver 1;V
Driver 2;V
Driver 3;Y
Driver 4;A
Driver 5;A
Driver 6;V
Driver 7;A
Driver 8;I
Driver 9;I
Driver 10;V
Driver 11;V
Driver 12;A
Driver 13;A
Driver 14;A
Driver 15;A
Driver.csv看起来像这样

Car 1;A
Car 2;A
Car 3;I
Car 4;A
Car 5;A
Car 6;I
Car 7;A
Car 8;A
Car 9;Y
Car 10;A
Driver 1;V
Driver 2;V
Driver 3;Y
Driver 4;A
Driver 5;A
Driver 6;V
Driver 7;A
Driver 8;I
Driver 9;I
Driver 10;V
Driver 11;V
Driver 12;A
Driver 13;A
Driver 14;A
Driver 15;A
所需的输出必须是

Car 1;Driver 4
Car 2;Driver 5
Car 3;Driver 8
Car 4;Driver 7
Car 5;Driver 12
Car 6;Driver 9
Car 7;Driver 13
Car 8;Driver 14
Car 9;Driver 3
Car 10;Driver 15
我的代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim car As String() = IO.File.ReadAllLines("path\car.csv").ToArray
        Dim drivers As String() = IO.File.ReadAllLines("path\driver.csv").ToArray
        Dim sb As New List(Of String)
        For Each line In car ' loop throw car
            Dim Fields1 = line.Split(";"c)
            For Each line1 In drivers 'loop throw driver
                Dim Fields2 = line1.Split(";"c)
                Dim driver As String = Fields2(0)
                If Fields1(1) = Fields2(1) Then
                    Fields1(1) = driver
                    sb.Add(String.Join(";", Fields1))
                End If
            Next
        Next
        IO.File.WriteAllLines("path\joined.csv", sb.ToArray())
    End Sub
不幸的是,输出看起来是错误的

Car 1;Driver 4
Car 2;Driver 4
Car 3;Driver 8
Car 4;Driver 4
Car 5;Driver 4
Car 6;Driver 8
Car 7;Driver 4
Car 8;Driver 4
Car 9;Driver 3
Car 10;Driver 4

如何避免分配已使用的值?我试图粘贴在内部循环字段21=used中,但它不起作用。我在这里迷路了

因为我更熟悉在vb.net中解析csv,所以我用它编写了代码,但另外,我需要它用于31列的整个日历和Excel VBA,但这是另一个故事


谢谢你的回答

这应该会让你非常接近

Private Sub MatchCarsButton_Click(sender As Object, e As EventArgs) Handles MatchCarsButton.Click

    Try

        Dim cars As List(Of String) = File.ReadAllLines("cars.csv").ToList
        Dim drivers As List(Of String) = File.ReadAllLines("drivers.csv").ToList
        Dim result As List(Of String) = MatchVehicles(cars, drivers)
        File.WriteAllLines("out.csv", result)

    Catch ex As Exception

        MessageBox.Show(String.Concat("An error occurred :", ex.Message))

    End Try

End Sub

Private Function MatchVehicles(cars As List(Of String), drivers As List(Of String)) As List(Of String)

    Dim result As New List(Of String)

    For Each car As String In cars
        Dim carVals() As String = car.Split(";"c)
        For Each driver As String In drivers
            Dim driverVals() As String = driver.Split(";"c)
            If carVals(1) = driverVals(1) Then
                result.Add(String.Format("{0};{1}", carVals(0), driverVals(0)))
                drivers.Remove(driver) ' remove them from the list
                Exit For ' exit the loop
            End If

        Next
    Next

    Return result

End Function

每次匹配驱动程序时,要么将其从数组中删除,要么将其标记为匹配,否则每次都将继续匹配相同的驱动程序。@JonRoberts是的,我理解我必须将其放置在hasmutch布尔值的某个位置,但我就是想不出它。谢谢@Andrew!它现在为一个专栏工作,将尝试自己做其余的。