1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Drecunion

Beiträge von Drecunion

  • Mehrere Files im Array auslesen und in eine neue CSV Datei schreiben (Hilfe)

    • Drecunion
    • 28. Januar 2016 um 09:25

    Oscar du rettest meinen Tag!
    Besten Dank dafür.
    Musste nur den Mode für FileOpen auf $FO_APPEND ändern und es funktioniert jetzt wie gewünscht besten Dank!

    Es ist interessant zu sehen, wie kurz der Code für mein eigentliches Vorhaben sein kann und werde versuchen meinen Code demnächst aufgeräumter zu gestalten.
    Bin wie gesagt noch ein Neuling in Sachen Autoit. :D

    Also an der Stelle nochmal danke an alle die sich die Haare hier ausgerissen haben.
    Zum Abschluss noch mein Funktionierender Code für alle die sich hierhin verlaufen:

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    
    
    Global $sXML_Path = 'C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine\'
    Global $sCSV_Path = 'C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheindörns\'
    
    
    Global $aXML_Files = _FileListToArray($sXML_Path, '*.xml', $FLTA_FILES, False) ; alle XML-Dateinamen in ein Array holen
    If @error Then Exit MsgBox(0, 'Fehler', 'Fehlernr.: ' & @error) ; wenn ein Fehler aufgetreten ist, Prg beenden
    ;_ArrayDisplay($aXML_Files)
    
    
    Global $sXML_Data, $sPurchaseOrderNumber, $sTrackingID, $hFile
    For $i = 1 To $aXML_Files[0] ; alle XML-Dateien durchgehen
    	$sXML_Data = FileRead($sXML_Path & $aXML_Files[$i]) ; Daten aus der XML-Datei lesen
    	$sPurchaseOrderNumber = StringRegExpReplace($sXML_Data, '(?s).+<PurchaseOrderNumber>(.+)</PurchaseOrderNumber>.+', '$1') ; Bestellnummer extrahieren
    	$sTrackingID = StringRegExpReplace($sXML_Data, '(?s).+<TrackingID>(.+)</TrackingID>.+', '$1') ; TrackingID extrahieren
    	$hFile = FileOpen($sCSV_Path & $sPurchaseOrderNumber & '.csv', $FO_APPEND ) ; Datei zum schreiben öffnen
    	If $hFile <> -1 Then ; wenn erfolgreich, dann...
    		FileWriteLine($hFile, 'Bestellnummer;TrackingID') ; Überschrift in die Datei schreiben
    		FileWriteLine($hFile, $sPurchaseOrderNumber & ';' & $sTrackingID) ; Daten in die Datei schreiben
    		FileClose($hFile) ; Datei schließen
    	EndIf
    Next
    Alles anzeigen
  • Mehrere Files im Array auslesen und in eine neue CSV Datei schreiben (Hilfe)

    • Drecunion
    • 27. Januar 2016 um 16:59

    Nochmals Danke das Ihr euch die Zeit nimmt.
    Mittlerweile durchläuft das Programm und erstellt mir meine Datei.
    Nur bin ich jetzt etwas verwirrt.
    Die Erstellte Datei trägt den Namen Lieferscheindörns0 eigentlich soll diese ja aus dem Jahr dann die Bestellnummer und dann dem Suffix bestehen.
    Es werden in die CSV auch nur 0 Werte geschrieben aber genau für 3 Testaufträge wie ich Sie im Ordner hab.
    Woran kann es liegen, dass die Werte nicht korrekt übermittelt werden?
    Ich glaube ich werde hier langsam zum hoffnungslosen Fall :S

    Anbei der jetzige Code:

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>
    $arFiles=_getFiles("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine")
    if @error then
    	MsgBox(16,"Error","Folder not found!")
    	exit
    endif
    if @extended=1 then
    	MsgBox(16,"Error","No Files found!")
    	exit
    endif
    $sFailed=_saveDataToFiles($arFiles,"C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheindörns")
    if $sFailed<>"" then
    	MsgBox(16,"Error","Failed Files: "&@crlf&@crlf&$sFailed)
    endif
    
    
    Func _getFiles($path, $rec = False)
    	Local $arFiles[1]
    	If $rec Then
    		$arFiles = _FileListToArrayRec("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine", "*", 1, 1, 0, 2)
    	Else
    		$arFiles = _FileListToArrayRec("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine", "*", 1, 0, 0, 2)
    	EndIf
    	Local $iErr=@error	;@Error Zwischen speichern
    	Switch @error
    		case 1 ;wrong path -> setError to 1
    			SetError(1, 0, $arFiles)
    		case 4 ;no files found -> setExtended to 1
    			SetError(0, 1, $arFiles)
    	EndSwitch
    	if $iErr Then Return
    	Local $arOnlyFiles[UBound($arFiles) - 1]
    	For $i = 0 To UBound($arOnlyFiles) - 1 Step 1
    		$arOnlyFiles[$i] = $arFiles[$i + 1]
    	Next
    	Return $arOnlyFiles
    EndFunc   ;==>_getFiles
    Func _saveDataToFiles($arFiles,$folder)
    	local $sFailedFiles=""
    	for $i=0 to UBound($arFiles)-1 step 1
    		If FileExists($arFiles[$i]) Then
    			local $sBestellNummer="?",$sTrackingNummer="?"
    			$sData=FileRead($arFiles[$i])
    			$arBestellNummer = _StringBetween($arFiles[$i],'<PurchaseOrderNumber>' , '</PurchaseOrderNumber>')
    			$arTrackingNummer = _StringBetween($arFiles[$i],'<TrackingID>','</TrackingID>')
    			if UBound($arBestellNummer)<1 then
    				$sBestellNummer=$arBestellNummer
    			endif
    			if UBound($arTrackingNummer)<1 then
    				$sTrackingNummer=$arTrackingNummer
    			endif
    			FileWrite($folder& $sBestellNummer & ".csv", $sBestellNummer & ";" & $sTrackingNummer & @CRLF)
    		Else
    			$sFailedFiles&=($sFailedFiles<>""?@crlf:"")&$arFiles[$i]
    		EndIf
    	next
    	return $sFailedFiles
    EndFunc
    Alles anzeigen
  • Mehrere Files im Array auslesen und in eine neue CSV Datei schreiben (Hilfe)

    • Drecunion
    • 27. Januar 2016 um 14:51

    Super Danke autoBert, der Fehler ist weg aber ein neuer wieder da.
    Bin schon den ganzen Mittag am um und rumstellen und komme grade nicht weiter.

    Der Fehler liegt in der Zeile 32 und gibt mir folgende Fehlermeldung

    "C:\Users\michel.stober\Desktop\Dropshipping\Skripte\neuer test mit ds lieferschein.au3" (32) : ==> Variable subscript badly formatted.:
    local $arOnlyFiles[UBound($arFiles)-1]
    local $arOnlyFiles[^ ERROR

    Ich hatte jetzt mehrere Sachen probiert und mit Ubound rumgebastelt aber kam nur zu weiteren Fehlermeldungen. Mit Arrays habe ich noch so meine Probleme und wüsste grad nicht weiter.
    Hat Hier jemand einen Tipp?

    Code wie folgt:

    AutoIt
    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>
    $arFiles=_getFiles("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine\*")
    if @error then
    MsgBox(16,"Error","Folder not found!")
    exit
    endif
    if @extended=1 then
    MsgBox(16,"Error","No Files found!")
    exit
    endif
    $sFailed=_saveDataToFiles($arFiles,"C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheindörns\")
    if $sFailed<>"" then
    MsgBox(16,"Error","Failed Files: "&@crlf&@crlf&$sFailed)
    endif
    Func _getFiles($path,$rec=false)
    local $arFiles[0]
    if $rec then
    $arFiles=_FileListToArrayRec("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine\*","*",1,1,0,2)
    else
    $arFiles=_FileListToArrayRec("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine\*","*",1,0,0,2)
    endif
    ;wrong path -> setError to 1
    If @error = 1 Then
    SetError(1,0,$arFiles)
    EndIf
    ;no files found -> setExtended to 1
    If @error = 4 Then
    SetError(0,1,$arFiles)
    EndIf
    local $arOnlyFiles[UBound($arFiles)-1]
    for $i=0 to UBound($arOnlyFiles)-1 step 1
    $arOnlyFiles[$i]=$arFiles[$i+1]
    next
    return $arOnlyFiles
    EndFunc
    Func _saveDataToFiles($arFiles,$folder)
    local $sFailedFiles=""
    for $i=0 to UBound($arFiles)-1 step 1
    If FileExists($arFiles[$i]) Then
    local $sBestellNummer="?",$sTrackingNummer="?"
    $sData=FileRead($arFiles[$i])
    $arBestellNummer = _StringBetween($arFiles[$i],'<PurchaseOrderNumber>' , '</PurchaseOrderNumber>')
    $arTrackingNummer = _StringBetween($arFiles[$i],'<TrackingID>','</TrackingID>')
    if UBound($arBestellNummer)<1 then
    $sBestellNummer=$arBestellNummer
    endif
    if UBound($arTrackingNummer)<1 then
    $sTrackingNummer=$arTrackingNummer
    endif
    FileWrite($folder& $sBestellNummer & ".csv", $sBestellNummer & ";" & $sTrackingNummer & @CRLF)
    Else
    $sFailedFiles&=($sFailedFiles<>""?@crlf:"")&$arFiles[$i]
    EndIf
    next
    return $sFailedFiles
    EndFunc
    Alles anzeigen
  • Mehrere Files im Array auslesen und in eine neue CSV Datei schreiben (Hilfe)

    • Drecunion
    • 27. Januar 2016 um 09:19

    Morgen,

    danke für die Hilfreichen Tipps!
    Leider funktioniert es noch nicht 100%ig.
    Ich kriege folgende Fehlermeldung:

    Code
    Failed Files:
    
    
    20162013_P-Slip.xml
    20162014_P-Slip.xml
    20162015_P-Slip.xml

    Habt Ihr eine Idee woran das liegen könnte?
    Der Dateiname der XML Dateien baut sich wie folgt auf: [Jahr][Bestellnummer]_P-Slip.xml also z.b. 20162013_P-Slip.xml , wobei _P-Slip.xml der Suffix ist
    Folgend ein kleiner Ausschnitt aus der auszulesenden XML Datei

    Spoiler anzeigen


    <Shipments>
    <Shipment>
    <ShipmentNumber>152457</ShipmentNumber>
    <PurchaseOrderNumber>123456789012345</PurchaseOrderNumber>
    <OrderDate>2013-08-01</OrderDate>
    <DeliveryDate>2013-08-02</DeliveryDate>
    <PDF_Attachment>false</PDF_Attachment>
    <CustomerText>Freie Text für Lieferschein und Rechnung</CustomerText>
    <ShipToAddress>
    <Name1></Name1>
    <Name2></Name2>
    <AddressLine1></AddressLine1>
    <AddressLine2><Adresszeile2></AddressLine2>
    <Postcode></Postcode>
    <Place></Place>
    <CountryCode>DE</CountryCode>
    <Phone></Phone>
    <Email>max.mustermann@abc.de</Email>
    </ShipToAddress>
    <NrOfParcels>1</NrOfParcels>
    <Parcels>
    <Parcel>
    <Forwarder>DPD</Forwarder>
    <TrackingID>7001848493</TrackingID>
    </Parcel>
    </Parcels>


    Mein jetziger Code:

    Spoiler anzeigen


    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>
    $arFiles=_getFiles("C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheine\")
    if @error then
    MsgBox(16,"Error","Folder not found!")
    exit
    endif
    if @extended=1 then
    MsgBox(16,"Error","No Files found!")
    exit
    endif
    $sFailed=_saveDataToFiles($arFiles,"C:\Users\michel.stober\Desktop\Dropshipping\Skripte\lieferscheindörns\")
    if $sFailed<>"" then
    MsgBox(16,"Error","Failed Files: "&@crlf&@crlf&$sFailed)
    endif
    Func _getFiles($path,$rec=false)
    local $arFiles[0]
    if $rec then
    $arFiles=_FileListToArrayRec($path,"*",1,1)
    else
    $arFiles=_FileListToArrayRec($path,"*",1,0)
    endif
    ;wrong path -> setError to 1
    If @error = 1 Then
    SetError(1,0,$arFiles)
    EndIf
    ;no files found -> setExtended to 1
    If @error = 4 Then
    SetError(0,1,$arFiles)
    EndIf
    local $arOnlyFiles[UBound($arFiles)-1]
    for $i=0 to UBound($arOnlyFiles)-1 step 1
    $arOnlyFiles[$i]=$arFiles[$i+1]
    next
    return $arOnlyFiles
    EndFunc
    Func _saveDataToFiles($arFiles,$folder)
    local $sFailedFiles=""
    for $i=0 to UBound($arFiles)-1 step 1
    If FileExists($arFiles[$i]) Then
    local $sBestellNummer="?",$sTrackingNummer="?"
    $sData=FileRead($arFiles[$i])
    $arBestellNummer = _StringBetween($arFiles[$i],'<PurchaseOrderNumber>' , '</PurchaseOrderNumber>')
    $arTrackingNummer = _StringBetween($arFiles[$i],'<TrackingID>','</TrackingID>')
    if UBound($arBestellNummer)<1 then
    $sBestellNummer=$arBestellNummer[0]
    endif
    if UBound($arTrackingNummer)<1 then
    $sTrackingNummer=$arTrackingNummer[0]
    endif
    FileWrite($folder& $sBestellNummer & ".csv", "Bestellnummer" & ";" & "TrackingID" & @CRLF & $sBestellNummer & ";" & $sTrackingNummer)
    Else
    $sFailedFiles&=($sFailedFiles<>""?@crlf:"")&$arFiles[$i]
    EndIf
    next
    return $sFailedFiles
    EndFunc

    Ich hoffe jemand kennt eine Lösung, ich lese schon mehrmals drüber und komme einfach nicht drauf.

  • Mehrere Files im Array auslesen und in eine neue CSV Datei schreiben (Hilfe)

    • Drecunion
    • 22. Januar 2016 um 17:04

    Danke für deine Schnelle Antwort habe grade kaum zeit das ausgiebig zu testen aber bekomme noch eine Fehlermeldung rein bei deiner Version: bei Zeile 46 error: _StringBetween(): undefined function.
    Bei Zeile 46 und 47 habe ich außerdem $file durch $arFiles ausgetauscht, bekam da nämlich auch eine Fehlermeldung die dann weg ging.
    Ansonsten sieht das ja schon viel besser aus als mein Kauderwelsch :S
    Ach und danke für die Aufklärung mit dem Array. ^^

  • Mehrere Files im Array auslesen und in eine neue CSV Datei schreiben (Hilfe)

    • Drecunion
    • 22. Januar 2016 um 15:53

    Hallo liebe Forumnutzer,

    bin neu und musste mich doch noch anmelden, da ich als stiller Beobachter doch nicht alle meine Fragen mithilfe des durchstöbern des Forums lösen konnte.
    Ich hoffe ich werde hier Hilfe finden. :)

    Also zu meinem derzeitigen "Projekt":
    Ich schreibe derzeit ein Skript das mir in einem Order Dateien in ein Array liest. Dann möchte ich jede einzelne Datei die in diesem Ordner ist auslesen und suche nach den Wert zwischen den Tags, siehe Beispiel: <number>Wert1</number> und <wert>wert2</wert>
    Die Werte Wert1 und Wert2 habe ich zugewiesen und möchte diese nun in eine Neue Datei schreiben, trennzeichengetrennt durch ein Semikolon.
    Das wärs auch eigentlich schon^^.
    Mein Code sieht derzeit etwas durcheinander aus, da ich noch ziemlich in den Anfängen von AutoIt bin und mehrere Foren Posts mit in meinen Code geworfen habe, also kann es gut sein, dass ich etwas zu viel mit #include reingeschmissen habe.

    Achja das wichtigste ganz vergessen. Beim ausführen bekomme ich die Fehlermeldung: Fehler: Not Found (Kann die Datei nicht finden obwohl eine da ist.) Benutze ich jetzt den Code für 1 Datei funktioniert es an sich ja aber der Ordner wird im Normalfall viele Dateien haben.

    PS: die Datei aus der ich die Werte lese ist eine .XML und soll später einige werte in eine .csv schreiben bzw. diese erstellen.

    AutoIt
    #cs ----------------------------------------------------------------------------
     AutoIt Version: 3.3.14.2
     Author:         myName
     Script Function:
    	Template AutoIt script.
    #ce ----------------------------------------------------------------------------
    ; Script Start - Add your code below here
    #include <String.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    main()
    Func main()
    	Local $Lieferscheine = _FileListToArray("C:\Users\drecunion\Desktop\Dropshipping\Skripte\lieferscheine\", "*")
    	If @error = 1 Then
            MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.")
            Exit
    	EndIf
    	 If @error = 4 Then
            MsgBox($MB_SYSTEMMODAL, "", "No file(s) were found.")
            Exit
    	 EndIf
    	;Local $sFile = "C:\Users\drecunion\Desktop\Dropshipping\Skripte\20162013__P-Slip.xml"     <------ wenn ich nur eine Datei auslese und mit direkten Pfad hinterlege Funktionierts
    	If FileExists($Lieferscheine) Then
    		$file = FileRead($Lieferscheine)
    		$bestellnummer = _StringBetween($file,'<PurchaseOrderNumber>' , '</PurchaseOrderNumber>')
    		$trackingnummer = _StringBetween($file,'<TrackingID>','</TrackingID>')
    		MsgBox(4096, "Dropshipping Lieferschein", "Trackingnummer: " & $trackingnummer[0] & @CRLF & "Bestellnummer: " & $bestellnummer[0])
    		FileWrite("C:\Users\drecunion\Desktop\Dropshipping\Skripte\lieferscheindörns" & $bestellnummer[0] & ".csv", "Bestellnummer" & ";" & "TrackingID" & @CR & $bestellnummer[0] & ";" & $trackingnummer[0])
    	Else
    		MsgBox(4096, "fehler", "not found")
    	EndIf
    EndFunc   ;==>main
    Alles anzeigen


    Würde mich über Hilfestellung Freuen.
    Danke und nochmal Danke an die tollen Forumbeiträge die mir auf dem bisherigen Weg geholfen haben. :thumbup:

    Lg Drecunion

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™