2015-03-02 102 views
0

我是一个尝试学习VB.NET的初学者,我不太清楚我将如何解释这一点,但我会给它一个镜头。基本上,我用CSV格式写了一个包含约10行数据的txt文件。在VB.NET中使用CSV .txt文件与数组编辑数据?

例如:

John, 10, 14 
Michael, 14, 27 
Billy, 13, 45 
etc, etc.... 

我只是希望能够读取和编辑特定行 - 不一定增加新的线路。

只是想知道如果有人能够简单地概述我将如何去做 - 不要求任何人为我编写程序。我只是不知道该怎么做,我无法理解我在SO上找到的其他答案,试图解决同样的问题。我不知道我是不是有点密集或什么的,所以如果有人能够给我一个简单的,简单的'我要做的事情'的概要,这将是非常棒的。

谢谢。

+1

我认为最好的方法是先装载所有内存中的数据(数组/列表/类)编辑数据,并保存所有的文件中。不要将其视为修改文件中的一行。将其视为加载/编辑/保存。首先确定如何读取数据,然后存储数据,然后编辑,保存。如果你有特定的问题,你可以回来问问。 – 2015-03-02 15:40:30

+0

感谢您的回复!只是想知道你的意思(数组/列表/类)? – BillyMcNab 2015-03-02 15:42:31

+0

您需要将数据存储在某个地方。这可以是数组/列表/类的组合(或/和)。 – 2015-03-02 15:43:18

回答

0

如评论中所述,您通常会将所有文件读入内存,操作它并将其全部写回。

DOTNET有把一个文件的内容在一个阵列(逐行)的方法

如果需要访问单个单元格中的CSV,你可能要运行在每一行分割法和加入合并

他们回到一起。

拆分/连接方法要么是字符串/数组对象的方法或者其在Strings命名空间

写回文件的方法也是在System.IO命名空间

0

你不要求为您编写代码,我可以理解您,但我认为无法证明您如何做到这一点。我使用@weberik提到的split/join方法。这是一个简单的控制台应用程序:

Public Class Sample 

    Public Shared Sub Main() 
     CreateExampleFileIfNotExists() 
     'lines variable is an "Array" 
     Dim lines() As String = IO.File.ReadAllLines("Example.txt") 
     'write items to the console 
     ShowItems(lines, "Values before edit:") 
     'edit the items 
     EditItems(lines) 
     'write edited items to the console 
     ShowItems(lines, "Values after edit:") 
     'save changes? 
     Save(lines) 
     'finish 
     Console.WriteLine("Press any key to exit.") 
     Console.ReadKey() 
    End Sub 

    Public Shared Sub ShowItems(lines() As String, header As String) 
     Console.WriteLine(header) 
     Dim headers() As String = {"Name:", "Value1:", "Value2:"} 
     WriteItems(headers) 
     For Each line In lines 
      WriteItems(line.Split(",")) 
     Next 
    End Sub 

    Public Shared Sub EditItems(lines() As String) 
     For i As Integer = 0 To lines.Length - 1 
      Dim line As String = lines(i) 
      Dim values() As String = line.Split(",") 
      'edit the item 
      values(0) = "Edited " & values(0) 
      values(1) += i 
      values(2) *= i 
      lines(i) = String.Join(",", values) 
     Next 
     Console.WriteLine() 'empty line 
    End Sub 

    Public Shared Sub WriteItems(itemValues() As String) 
     Dim line As String = "" 
     For Each item In itemValues 
      line &= item & vbTab & vbTab 
     Next 
     Console.WriteLine(line) 
    End Sub 

    Public Shared Sub CreateExampleFileIfNotExists() 
     If Not IO.File.Exists("Example.txt") Then 
      IO.File.WriteAllLines("Example.txt", {"John,10,14", "Michael,14,27", "Billy,13,45"}) 
     End If 
    End Sub 

    Public Shared Sub Save(lines() As String) 
     Console.WriteLine(vbCrLf & "Do you want to save the changes? Y/N") 
     Dim result = Console.ReadKey() 
     Console.WriteLine() 
     Select Case result.Key 
      Case ConsoleKey.Y 
       IO.File.WriteAllLines("Example.txt", lines) 
       Console.WriteLine("The changes has been saved.") 
     End Select 
    End Sub 

End Class 
+0

非常感谢,但如何我试试这个代码?我需要在表单上放置按钮或文本框吗?当我尝试运行它时,它不起作用。 – BillyMcNab 2015-03-02 17:06:19

+0

它是一个控制台应用程序。因此,默认情况下,代码无法在Windows应用程序中正常运行。要运行此代码,请选择“控制台应用程序”并删除“Module1.vb”文件以创建一个新项目。之后,添加一个名为“Sample”的新类,并用上面的代码填写你的类。 – iBener 2015-03-03 08:59:05

+0

再次感谢你,但我只有一个问题:我做了你所说的,我仍然收到以下错误消息。错误在'ConsoleApplicationTest.Module1'中找不到'Sub Main'。 \t ?? – BillyMcNab 2015-03-03 11:43:40