0

我正在用带有一个按钮的表单在 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

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

4

1 回答 1

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 中日期中的反斜杠引起的 - 使 pc 寻找像 /3/12 这样的路径,我猜它正在将斜杠转换为文件夹分隔符,所以我用 UNDERSCORES 替换它们。

根据您的喜好编辑代码后,您可以覆盖现有文件而不是生成 _copy.txt,因为这就是我在示例中使用 _copy.txt 进行测试的方式。

更新

感谢您的反馈。很奇怪,您的(生成的)文件是空的,因为在我拥有的文件中,一个有数据,另一个是空的。这使我假设您的调整可能与此有关?

供您参考,我在下面发布了它们。

原始文件 [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 的副本(修改后)

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 导出.TXT

VT2000
VT2000
于 2013-03-26T18:39:29.157 回答