0

私はVB 2010で、ボタンが1つあるフォームを完全に馬鹿にするために書いています。私はしばらく VB を使用していませんでしたが、2010 年には、数年前に使用したときと比べて多くの変更が加えられていることに気付きました。

私がする必要があるのは、ファイルから読み取り、元のファイルに書き込みながら2つの新しい別々のファイルを書き込むことです。テキスト ファイルから読み取って内容を取得し、現在の日付を比較します。

テキスト コンテンツはシリアルで、次の 2 つの列は日付になります。

    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) を使用しているため、日付形式に関するエラーが発生しました。

とにかく、必要になるとは思わないので関数を取り除くことができますが、何が起こっているのかを非常に自明で見ることができ、単に日付形式間で変換することができるように残しましたが、日と月が 2 桁ではない (先頭にゼロがない) という事実。

正しい方向に向けるのに役立ち、好みに合わせて切り刻んで変更できることを願っています.

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

さらに、既存のファイルを上書きしないようにファイル名を変更しました(2つのファイルを比較できました)。

ほとんどの問題は、FILENAMES の日付のバックスラッシュから発生していました。PC に /3/12 のようなパスを検索させていました。スラッシュをフォルダーの区切り記号に変換していたと思われるため、その場でアンダースコアに置き換えました。

好みに合わせてコードを編集したら、_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

注: 2 つの長い行は、既存の 4 行のテキストの間に挿入されたものだと思います

VTTEST06_04_2013 SAP インポート.Txt

このファイルは空でした

VTTEST27_03_2013 SAP エクスポート.TXT

VT2000
VT2000
于 2013-03-26T18:39:29.157 に答える