【问题标题】:vb.net modify column in CSV filevb.net 修改 CSV 文件中的列
【发布时间】:2011-11-03 13:22:32
【问题描述】:

我有一个包含许多行的 CSV 文件,我需要在其中使用 VB.NET 更新/替换第四列的值。列上没有标题,因此循环可以从第一行开始。

infile.csv
"value1","value2","value3","value4"

经过大量谷歌搜索,有很多关于如何读取和写入 CSV 文件的示例,但没有一个是真正需要的。我知道有多种方法可以完成这项任务,但要求是使用 VB.NET 完成。任何帮助将不胜感激。


从 Marco 的 C# 答案移植的最终代码

    Private Sub CSVmod(ByVal strFileName As String, ByVal newFileName As String)

    Dim strLines As String() = File.ReadAllLines(strFileName)
    Dim strList As New List(Of String)
    Dim strReplace As String = "test"

    For Each line In strLines
        Dim strValues As String() = line.Split(",")
        If (strValues.Length = 14) Then
            strValues(3) = strReplace

            strList.Add(String.Join(",", strValues))
        End If

    Next

    File.WriteAllLines(newFileName, strList.ToArray())

【问题讨论】:

    标签: vb.net csv


    【解决方案1】:

    对不起,我只能用 C# 编写它。
    我认为转换到 VB.NET 不会有很多问题。
    这是我的代码:

    private void SubstFile(string filename, string newFileName)
    {
        // Reading all rows of the file
        string[] lines = File.ReadAllLines(filename);
    
        List<string> list = new List<string>();
        foreach (string line in lines)
        {
            // For every row I split it with commas
            string[] values = line.Split(',');
            // Check to have 4 values
            if (values.Length == 4)
            {
                // Substitute fourth value
                values[3] = "new value";
                // Add modified row to list
                list.Add(String.Join(",", values));
            }
        }
        // Save list to new file
        File.WriteAllLines(newFileName, list.ToArray());
    }
    

    VB.NET 版本:

    Private Sub SubstFile(filename As String, newFileName As String)
        ' Reading all rows of the file
        Dim lines As String() = File.ReadAllLines(filename)
    
        Dim list As List(Of String) = New List(Of String)()
        For Each line As String In lines
            ' For every row I split it with commas
            Dim values As String() = line.Split(","c)
            ' Check to have 4 values
            If values.Length = 4 Then        
                ' Substitute fourth value
                values(3) = "new value"
                ' Add modified row to list
                list.Add(String.Join(",", values))
            End If
        Next
        ' Save list to new file
        File.WriteAllLines(newFileName, list.ToArray())
    End Sub
    

    【讨论】:

    • 您可以在 VB.Net 中使用 Textfieldparser 而不是读取所有行。但除此之外,我不知道你是否可以只编辑一个字段而不重写整个文件
    • @Nicholas: TextFieldParser 在 `Microsoft.VisualBasic.FileIO` 命名空间内,而我提供的解决方案在每种语言(VB.NET、C#、ASP.NET)中都有效。解析那个文件太容易了,需要另一个类来做,你不觉得吗? :)
    • TextFieldParser 更好,因为 CSV 文件仍然支持带逗号的字符串值(通常用引号括起来)。在这种情况下,这段代码会搞砸。
    • @OlivierJacot-Descombes 感谢 Olivier 的精彩网站(虽然一个小时前会很棒:-\ 已经移植了 - 上面发布了最终结果),将来会很好用。
    【解决方案2】:

    使用python....一行代码

    df = pandas.read_csv('file.csv)

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    相关资源
    最近更新 更多