Jump to content

Kopieren/ Einfügen aus Kopfzeilen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Gemeinde!

 

Folgende Problematik...

Es kommen Files (SLSRPT) im EDIFACT Format an, werden in s inhouse Format umgewandelt und dann eingelesen vom ERP System. Soweit so gut.

Dieses inhouse File sieht ungefähr so aus:

 

SYNTAX;SLSRPT;D;96A;9999999999991;9999999999995
KOPSLS;0000087;20090525;;;9999999999995;9999999999991;EUR;
ORTSLS;9008477000005;;;1;4001111111111;;;;;;1+;PCE;674;;;;
ORTSLS;9008477000005;;;2;4001111111111;;;;;;1+;PCE;6744;;;;
KOPSLS;0000087;20090518;;;9999999999995;9999999999991;EUR;
ORTSLS;9008477000005;;;1;4001111111111;;;;;;1+;PCE;674;;;;
ORTSLS;9008477000005;;;2;4001111111111;;;;;;1+;PCE;6744;;;;
KOPSLS;0000087;20090519;;;9999999999995;9999999999991;EUR;
ORTSLS;9008477000005;;;1;4001111111111;;;;;;1+;PCE;674;;;;
ORTSLS;9008477000005;;;2;4001111111111;;;;;;1+;PCE;6744;;;;
ORTSLS;9008477000005;;;1;4001111111111;;;;;;1+;PCE;674;;;;
ORTSLS;9008477000005;;;2;4001111111111;;;;;;1+;PCE;6744;;;;
KOPSLS;0000087;20090520;;;9999999999995;9999999999991;EUR;
ORTSLS;9008477000005;;;1;4001111111111;;;;;;1+;PCE;674;;;;
ORTSLS;9008477000005;;;2;4001111111111;;;;;;1+;PCE;6744;;;;
ORTSLS;9008477000005;;;1;4001111111111;;;;;;1+;PCE;674;;;;

 

Alle KOPSLS bis auf die erste werden mit folgendem Script gelöscht:

 

Sub Main()

       Dim datei As String
       Dim datei2 As String
       Const pfad = "\\edi\import\"
       Dim kopfgefunden As Boolean


       'Dim i

       'datei = pfad & Right$(My.Application.CommandLineArgs.Item(1), 9)

       'MsgBox(datei)

       'For i = 1 To My.Application.CommandLineArgs.Count

       '    MsgBox(My.Application.CommandLineArgs.Item(i - 1))
       '    If File.Exists(datei) Then MsgBox("ja")

       'Next i

       If My.Application.CommandLineArgs.Count = 3 Then

           'datei = My.Application.CommandLineArgs.Item(0)
           datei = My.Application.CommandLineArgs.Item(0)
           datei2 = My.Application.CommandLineArgs.Item(1)
           kopfgefunden = False

           'datei2 = Left$(datei, Len(datei) - 4) & "_OK.inh"
           Try
               ' Create an instance of StreamReader to read from a file.
               Using sr As StreamReader = New StreamReader(datei)
                   Dim line As String
                   Dim sr2 = New StreamWriter(datei2, False)

                   ' Read and display the lines from the file until the end 
                   ' of the file is reached.
                   Do
                       line = sr.ReadLine()
                       If Left(line, 6) <> "KOPSLS" Then
                           sr2.writeline(line)
                       Else
                           If kopfgefunden = False Then
                               kopfgefunden = True
                               sr2.writeline(line)
                           End If
                       End If
                   Loop Until sr.EndOfStream
                   sr.Close()
                   sr2.close()

               End Using

               'File.Delete(pfad & datei)

           Catch E As Exception

               Console.WriteLine("The file could not be read:")
               Console.WriteLine(E.Message)
           End Try

       Else
           Console.WriteLine("Bitte geben sie den Dateinamen der  Salesreportdatei an !")
       End If
   End Sub

 

Ich möchte aber vorher, dass das Datum aus der 2ten und aus der letzten Kopfzeile in die 1te Kopfzeile geschrieben werden und erst dann alle KOPSLS außer natürlich der 1ten gelöscht werden.

Hintergrund:

In der 1ten Kopfzeile steht nur das Übertragungsdatum 20090525.

In der 2ten bis zur letzten stehen die jeweiligen Verkaufstage. Daher brauche ich die 2te und die letzte Kopfzeile in der 1ten Kopfzeile um den Zeitraum einlesen zu können. Ich hoffe ihr könnt mir folgen und habt hier einen Ansatz parat?

 

Viele Grüße

Link zu diesem Kommentar
  • 4 Wochen später...

Hi,

 

wo genau sollen die Daten denn dann in die 1.Kopfzeile eingefügt werden?

Sowas in der Art:

KOPSLS;0000087;20090525;20090518;20090520;9999999999995;9999999999991;EUR;

also Anfangs- und Enddatum in die leeren Felder hinter dem 1.Datum?

 

Um die Daten aus "line" komfortabel bearbeiten zu können, bietet sich die Split-Funktion an:

arrFields = Split(line, ";")
strSyn = arrFields(0) ' also KOPSLS bzw. ORTSLS
strDate = arrFields(3)
...usw.

Link zu diesem Kommentar

Hallo!

 

Vielen Dank für deine Anregungen. Es soll so aussehen

 

KOPSLS;0000087;20090520;20090518;;9999999999995;9999999999991;EUR;

 

Somit entfällt in der 1. Kopfzeile das Übertragungsdatum und wird mit der letzten

Kopfzeile (Datum) ersetzt. Als weiteres Datum kommt das aus der 2. Kopfzeile dahinter. Somit entfäält auch ein ";" aus der 1. Kopfzeile.

Das war s dann eigentlich auch schon ;)

 

Hoffe man kann verstehen was ich will ?

Link zu diesem Kommentar

So was in der Art davor setzen (ggf. Arrays noch passend dimensionieren),

hinterher Datei wieder zurücksetzen (sr.movefirst oder schliessen und wieder öffnen)

                   Do
                       line = sr.ReadLine()
                       If Left(line, 6) = "KOPSLS" Then
			if cntHead = 0 then strHead = line
			arrHead = Split(line,";")
			strDate(cntHead) = arrHead(2)
			cntHead = cntHead + 1
                      End If
                   Loop Until sr.EndOfStream
	strHead = Replace(strHead,strDate(0) & ";",strDate(1) & ";" & strDate(cntHead-1))

und in der Schleife darunter noch line durch strHead ersetzen

                           If kopfgefunden = False Then
                               kopfgefunden = True
                               sr2.writeline(strHead)
                           End If

Link zu diesem Kommentar

Tausend Dank Cybquest. Wie immer super Hilfe von dir -schleim ;)

Habe den Code jetzt wie folgt angepasst. Die sr.movefirst Geschichte ist mir nicht so ganz klar.

 

   Sub Main()

       Dim datei As String
       Dim datei2 As String
       Const pfad = "\\edi\import\"
       Dim kopfgefunden As Boolean


       If My.Application.CommandLineArgs.Count = 3 Then

           'datei = My.Application.CommandLineArgs.Item(0)
           datei = My.Application.CommandLineArgs.Item(0)
           datei2 = My.Application.CommandLineArgs.Item(1)
           kopfgefunden = False

           Try
               ' Create an instance of StreamReader to read from a file.
               Using sr As StreamReader = New StreamReader(datei)
                   Dim line As String
                   Dim sr2 = New StreamWriter(datei2, False)


                   Do
                       line = sr.ReadLine()
                       If Left(line, 6) = "KOPSLS" Then
                           If cntHead = 0 Then strHead = line
                           arrHead = Split(line, ";")
                           strDate(cntHead) = arrHead(2)
                           cntHead = cntHead + 1
                       End If
                   Loop Until sr.EndOfStream
                   strHead = Replace(strHead, strDate(0) & ";", strDate(1) & ";" & strDate(cntHead - 1))


                   ' Read and display the lines from the file until the end 
                   ' of the file is reached.
                   Do
                       line = sr.ReadLine()
                       If Left(line, 6) <> "KOPSLS" Then
                           sr2.writeline(line)
                       Else

                           If kopfgefunden = False Then
                               kopfgefunden = True
                               sr2.writeline(strHead)
                           End If
                           'If kopfgefunden = False Then
                           '    kopfgefunden = True
                           '    sr2.writeline(line)
                           'End If
                       End If
                   Loop Until sr.EndOfStream
                   sr.Close()
                   sr2.close()

               End Using

               'File.Delete(pfad & datei)

           Catch E As Exception
               ' Let the user know what went wrong.
               Console.WriteLine("The file could not be read:")
               Console.WriteLine(E.Message)
           End Try

       Else
           Console.WriteLine("Bitte geben sie den Dateinamen der Salesreportdatei an !")
       End If
   End Sub


Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...