修改了代码修改的行

时间:2014-09-24 09:18:18

标签: vb.net csv

我有这样的数据

date                    value
24sep2014 2:23:01        0.1
24sep2014 2:23:02        0.3
24sep2014 2:23:03        0.2
24sep2014 2:23:04        0.3

这些不是昏迷的分离值。我想用CSV文件写。 Apen下一行的值。

1)如何在这里只打开一次文件。当它下次运行时,文件名必须更改为其他名称 2)如何附加下一个值

   Imports System
Imports System.IO.Ports
Imports System.ComponentModel
Imports System.Threading
Imports System.Drawing
Imports System.Windows.Forms.DataVisualization.Charting

Public Class Form1
    Dim myPort As Array
    Dim Distance As Integer



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myPort = IO.Ports.SerialPort.GetPortNames()
        PortComboBox.Items.AddRange(myPort)
        BaudComboBox.Items.Add(9600)
        BaudComboBox.Items.Add(19200)
        BaudComboBox.Items.Add(38400)
        BaudComboBox.Items.Add(57600)
        BaudComboBox.Items.Add(115200)
        ConnectButton.Enabled = True
        DisconnectButton.Enabled = False

        Chart1.Series.Clear()
        Chart1.Titles.Add("Demo")
        'Create a new series and add data points to it.
        Dim s As New Series
        s.Name = "CURRENT"
        s.ChartType = SeriesChartType.Line

    End Sub

    Private Sub ConnectButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ConnectButton.Click
        SerialPort1.PortName = PortComboBox.Text
        SerialPort1.BaudRate = BaudComboBox.Text
        SerialPort1.Open()
        Timer1.Start()
        Timer2.Start()
        'lblMessage.Text = PortComboBox.Text & " Connected."
        ConnectButton.Enabled = False
        DisconnectButton.Enabled = True
    End Sub

    Private Sub DisconnectButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisconnectButton.Click
        SerialPort1.Close()

        DisconnectButton.Enabled = False
        ConnectButton.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim counter As Integer
        counter = 0


        Try

            SerialPort1.Write("c")
            System.Threading.Thread.Sleep(250)
            Dim k As Double
            Dim distance As String = SerialPort1.ReadLine()
            k = CDbl(distance)
            ListBoxSensor.Text = k

            Dim s As New Series
            s.Points.AddXY(1000, k)
            Chart1.Series.Add(s)

            Dim headerText = ""
            Dim csvFile As String = Path.Combine(My.Application.Info.DirectoryPath, "Current.csv")

            If Not File.Exists(csvFile)) Then
                headerText = "Date& time ,Current"
            End If

            Using outFile = My.Computer.FileSystem.OpenTextFileWriter(csvFile, True)
                If headerText.Length > 0 Then
                    outFile.WriteLine(headerText)
                End If
                Dim y As String = DateAndTime.Now
                Dim x As String = y + "," + distance
                outFile.WriteLine(x)
            End Using

        Catch ex As Exception

        End Try



    End Sub

    Private Sub Relay_ON_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Relay_ON.Click
        SerialPort1.Write("1")
    End Sub

    Private Sub Relay_Off_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Relay_Off.Click
        SerialPort1.Write("0")
    End Sub




End Class

这里我一次又一次打开文件。这个原因我只能存储一个值

@ steve错误Error image

1 个答案:

答案 0 :(得分:0)

OpenTextFileWriter的第二个参数允许附加而不是覆盖您的文件 因此,检查文件是否存在(因此插入标题名称)然后编写数据

就是一个问题
Dim headerText = ""
Dim csvFile As String = Path.Combine(My.Application.Info.DirectoryPath, "Current.csv")
If Not File.Exists(csvFile) Then
    headerText = "Date& time ,Current"
End If 

Using outFile = My.Computer.FileSystem.OpenTextFileWriter(csvFile, True)
    If headerText.Length > 0 Then 
        outFile.WriteLine(headerText)
    End If
    Dim y As String = DateAndTime.Now
    Dim x As String = y + "," + distance
    outFile.WriteLine(x)
End Using

请注意Using Statement,以确保在出现异常时关闭并处置文件资源。

但是,考虑到需要编写的简单文本,您还可以选择使用方法WriteAllText

Dim headerText = ""
Dim csvFile As String = Path.Combine(My.Application.Info.DirectoryPath, "Current.csv")
If Not File.Exists(csvFile) Then
    headerText = "Date& time ,Current" & Environment.NewLine
End If 

Dim y As String = DateAndTime.Now
Dim x As String = headerText & y & "," + distance & Environment.NewLine
My.Computer.FileSystem.WriteAllText(csvFile, x, True)