用于读写的VBA文本文件输入

时间:2013-03-26 08:07:47

标签: vb.net visual-studio-2010

我正在VB 2010中写一个带有一个按钮的表单,完全是白痴。我有一段时间没有做过VB,并注意到2010年我做了很多改变比较几年前。

我需要做的是从文件中读取并在写入原始文件时写入两个新的单独文件。它将从文本文件中读取以获取一些内容并比较当前日期。

文本内容将是一个序列号,接下来的两列将是日期。

    Dim iFileName As New StreamReader("G:\SAP In and Out\test.txt", False)
    Dim sFileExport As New StreamWriter(DateValue(Now)) + " SAP Export", False)
    Dim sFileImport As New StreamWriter(DateAdd(DateInterval.Day, 10, DateValue(Now)) + " SAP Import", False)

    Dim VTS As String 'Will be used to grab the VT serial
    Dim CurrentDate As Date 'Will be used to compare to grabbed dates
    Dim NextDateOut As Date 'Will be used to grab next date out value
    Dim NextDateIn As Date 'Will be used to grab next date in value

    'Setting a consistant value with daily'
    CurrentDate = DateValue(Now)

    Do While Not EOF(1)

        Input(iFileName),VTS,NextDateOut,NextDateIn

        If CurrentDate = NextDateOut Then

            'Write to the export File
            sFileExport.write(VTS)

            'Write under the just read line in the open file
            iFileName.write(/newline + VTS + /TAB + (DateAdd(DateInterval.Day, 20, DateValue(Now)) + /tab + (DateAdd(DateInterval.Day, 30, DateValue(Now)))

        ElseIf CurrentDate = NextDateIn Then

            'Write to import file
            sFileImport.Write(VTS)

        End If

    Loop

End Sub

但我的语法已关闭,显然没有运行,因为我正在寻求帮助。 请提前帮助和感谢。我已经工作了几个小时,但还没有任何积极的结果。

1 个答案:

答案 0 :(得分:0)

嗯,我现在认为它,但我必须添加一个额外的功能,所以我可以测试它。 我收到日期格式错误,因为我希望您使用美国日期格式(MM / DD / YYYY),我使用英国日期格式(DD / MM / YYYY)。

无论如何你可以剥掉这个功能,因为我认为你不需要它,但是我还是把它留了下去,所以你可以看到它的解释是什么,只是简单地在日期格式之间转换,虽然它是你的日期和月份不是两位数(不是前导零)这一事实更加困难。

我希望它有助于指出你正确的方向,你可以根据自己的喜好进行切割和改变。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


    Dim iFileName As New System.IO.StreamReader("c:\temp\vttest.txt", False)
    Dim iReadData As List(Of String)
    Dim Buffer As String

    'Read complete file into array
    iReadData = New List(Of String)
    Do While Not iFileName.EndOfStream()
        Try
            Buffer = ""
            Buffer = iFileName.ReadLine()
            iReadData.Add(Buffer)
        Catch ex As Exception
            'error or end of file
        End Try
    Loop
    iFileName.Close()

    'Not needed
    'Dim VTS As String              'This is in iLineData(0) after we split the line
    'Dim NextDateOut As Date    'This is in iLineData(1) after we split the line
    'Dim NextDateIn As Date     'This is in iLineData(2) after we split the line

    'Process
    Dim iFileUpdated As New System.IO.StreamWriter("c:\temp\vttest_copy.txt", True)
    Dim sFileExport As New System.IO.StreamWriter("c:\temp\vttest" & Replace(DateValue(Now), "/", "_") & " SAP Export.txt", True)
    Dim sFileImport As New System.IO.StreamWriter("c:\temp\vttest" & Replace(DateAdd(DateInterval.Day, 10, DateValue(Now)), "/", "_") + " SAP Import.txt", True)
    Dim iLineData() As String

    'Setting a consistant value with daily'
    Dim CurrentDate As Date = DateValue(Now)
    Dim RowId = 0
    Do While RowId < iReadData.Count()
        iLineData = Split(iReadData(RowId), " ")
        iFileUpdated.WriteLine(iLineData(0) & " " & iLineData(1) & " " & iLineData(2))
        If CurrentDate = FormatDate(iLineData(1), "US", "UK") Then
            'Write to the export File
            sFileExport.WriteLine(iLineData(0))
            'Write under the just read line in the open file
            iFileUpdated.WriteLine(iLineData(0) & " " & (DateAdd(DateInterval.Day, 20, DateValue(Now))) & " " & (DateAdd(DateInterval.Day, 30, DateValue(Now))))
        ElseIf CurrentDate = FormatDate(iLineData(2), "US", "UK") Then
            'Write to import file
            sFileImport.WriteLine(iLineData(0))
        End If
        RowId = RowId + 1
    Loop
    sFileExport.Close()
    sFileImport.Close()
    iFileUpdated.Close()
    MsgBox("Finshed")
End Sub

'This section added because my PC is set to DD/MM/YYYY (UK)
'Expect yours is set to  MM/DD/YYYY (US)
Function FormatDate(ThisDate As String, ThisFormat As String, ThisTargetFormat As String) As Date
    Dim X As Integer = 0
    Dim Day1 As Integer = 0
    Dim Month1 As Integer = 0
    Dim Year1 As Integer = 0
    Dim Buf As String = ""
    If ThisFormat = "US" Then
        For X = 1 To Len(ThisDate)
            If Mid(ThisDate, X, 1) = "/" Then
                If Month1 > 0 Then
                    Day1 = Buf
                    Buf = ""
                Else
                    Month1 = Buf
                    Buf = ""
                End If
            Else
                Buf = Buf & Mid(ThisDate, X, 1)
            End If
        Next
        Year1 = Buf
    Else
        For X = 1 To Len(ThisDate)
            If Mid(ThisDate, X, 1) = "/" Then
                If Day1 > 0 Then
                    Month1 = Buf
                    Buf = ""
                Else
                    Day1 = Buf
                    Buf = ""
                End If
            Else
                Buf = Buf & Mid(ThisDate, X, 1)
            End If
        Next
        Year1 = Buf
    End If
    'reformat for output
    If ThisFormat = "US" Then
        If ThisTargetFormat = "US" Then
            'USA
            FormatDate = (Format(Month1, "00") & "/" & Format(Day1, "00") & "/" & Format(Year1, "0000"))
        Else
            'UK
            FormatDate = (Format(Day1, "00") & "/" & Format(Month1, "00") & "/" & Format(Year1, "0000"))
        End If
    Else
        If ThisTargetFormat = "US" Then
            'USA
            FormatDate = (Format(Month1, "00") & "/" & Format(Day1, "00") & "/" & Format(Year1, "0000"))
        Else
            'UK
            FormatDate = (Format(Day1, "00") & "/" & Format(Month1, "00") & "/" & Format(Year1, "0000"))
        End If
    End If

End Function

此外,我更改了文件名,以便不覆盖现有文件(所以我可以比较这两个文件)。

大多数问题都来自于FILENAMES中日期的反斜杠 - 让电脑找到像/ 3/12这样的路径我猜它是将斜杠翻译成文件夹分隔符所以我用它们替换了UNDERSCORES

根据您的偏好编辑代码后,您可以覆盖现有文件,而不是生成_copy.txt,就像我在样本中使用_copy.txt进行测试一样。

更新

感谢您的反馈。嗯,奇怪的是你的(生成的)文件是空的,因为在我有ONE的数据中,另一个是空的。这导致我假设你的调整可能与它有关吗?

供我参考,我已在下面发布。

原始文件[VTSTEST.TXT]

VT1000 3/26/2013 4/5/2013
VT1100 3/26/2013 4/5/2013
VT2000 3/27/2013 4/6/2013
VT2200 3/27/2013 4/6/2013

VTSTEST.TXT的COPY(修改后)

VT1000 3/26/2013 4/5/2013
VT1100 3/26/2013 4/5/2013
VT2000 3/27/2013 4/6/2013
VT2000 16/04/2013 26/04/2013
VT2200 3/27/2013 4/6/2013
VT2200 16/04/2013 26/04/2013

注意:我希望两条较长的行是插入现有四行文本

之间的行

VTTEST06_04_2013 SAP Import.Txt

此文件为空

VTTEST27_03_2013 SAP Export.TXT

VT2000
VT2000