Beiträge von Bit-Service
-
-
So, erstmal vielen Dank für die zahlreichen Beiträge.
Derzeit arbeitet "Ahnungslos" an meiner Anfrage, habe von Ihm auch schon ein Script zugeschickt bekommen, aber es noch nicht testen können. Werde es schnellstmöglich nachholen und mich dann noch einmal melden.
@gmmg die Daten kommen zum einen aus den Lagerbestandsberichten die Amazon bereitstellt und zum anderen handelt es sich um unsere Preisliste.
-
Hallo,
ich hätte gerne ein Script, dass sich diverse Infos aus verschiedenes Dateien holt und diese Anhand einer Artikelnummer in einer Datei zusammen fügt. Es geht um eine Gebührenberechnung für Amazon.
Vergütung: 20 Euro VB- Vorschau zu Verkaufsgebühren - Beta -
Zunächst sollte aus einem Order (Bespw. C:\_import\test\download\) die aktuellste Datei eingelesen werden. Diese Datei ist immer eine tabstopgetrennte Textdatei wie 51069591344.txt, nur der Dateiname ändert sich jedes mal. Es befinden sich bis zu 50 tausend Datensätze in dieser Datei.
Die relevanten Informationen aus dieser Datei stehen zum einen inSpalte A - Artikelnummer
Spalte D - Verkaufspreis Euro (Punkt als Dezimaltrennzeichen)
Spalte E - Gebühren in Euro (Punkt als Dezimaltrennzeichen)Benötigt wird die Artikelnummer zu Zuordnung und die prozentualen Gebühren (=100/Spalte D*Spalte E) gerundet auf eine ganze Zahl. Also statt 7,0254 soll es 7 sein.
- FBA-Lagerbestand -
Nun sollte aus einem Order (Bespw. C:\_import\test\FBA-Bestand\) die aktuellste Datei eingelesen werden. Diese Datei ist ebenfalls immer eine tabstopgetrennte Textdatei wie 51069591344.txt, nur auch hier ändert sich der Dateiname jedes mal. In dieser Datei befinden sich weniger, vermutlich nie mehr als 1000 Datensätze.
Die relevante Informationen aus dieser Datei steht nur in Spalte A - die Artikelnummer.Die Artikelnummern dieser beiden Dateien sollten nun verglichen werden, und bei allen Artikelnummern, die in beiden Dateien vorkommen, sollte der ganze Datensatz aus der ersten Datei gelöscht werden.
- Preisliste -
Nun sollte aus dem Ordner C:\_import\test\Preisliste\ die Datei preisliste-amazon.csv eingelesen werden. Diese Datei enthält folgende Informationen:
Spalte A - Artikelnummer
Spalte B - Verkaufspreis
Spalte C - Gewicht
Spalte D - Diese Spalte ist für den Amazonverkaufspreis, der nun errechnet werden soll anhand der Formel:= (Verkaufspreis+Versandkosten)/((1/(1+MwSt))-Gebühren in %)-Versandkosten
= Spalte B+4,99/((1/(1+0,19))-Gebühren in % aus der ersten Datei)-4,99- Datei erstellen -
Die Ausgabe der Daten sollte dann in folgendem Format erfolgen:
Spalte A - Artikelnummer
Spalte B - leer
Spalte C - errechneter Amazonpreis (Dezimaltrennzeichen muss hier wieder . sein)Sehr nützlich wären Kommentare in dem Script, da es mit Sicherheit noch einige Male angepasst werden muss, und ein Protokoll, in welchem die einzelnen Vorgänge dokumentiert werden.
Ich hoffe, ich konnte mein Anliegen verständlich vermitteln und hoffe, dass sich jemand findet, der mir helfen kann
-
ah ok, aber das bringt mir dann nichts, da die Datensätze vorher gelöscht werden müssten.
Wäre es möglich diese Funktion
oder eine ähnliche noch vor dem eigentlichen Script durchzuführen (oder zur Not als eigenes Programm, welches ich dann mittels Batch starten kann).
Die Funktion müsste auf jeden Fall bei der Quelldatei angewandt werden, damit entsprechende Datensätze vor dem Abgleich gelöscht werden.
Vielen Dank.
-
Welche AutoIt-Version verwendest du?
und an welche stelle muss ich das einfüge, damit er das mit Datei2.csv macht?
Spoiler anzeigen
[autoit]Global Const $s_CSV1 = "Datei1.csv"
[/autoit] [autoit][/autoit] [autoit]
Global Const $s_CSV2 = "Datei2.csv"
Global Const $s_CSVOut = "Out.csv"Global $dic_CSV1 = ObjCreate("Scripting.Dictionary") ; Ein Dictionary als Zwischenspeicher da es sich schneller durchsuchen lässt als ein Array
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $s_Key, $s_Out = "" ; $s_Out = zu schreibendes EndergebnisFor $s_Line In FileReadToArray($s_CSV1) ; erste Datei zeilenweise durchgehen
[/autoit] [autoit][/autoit] [autoit]
$s_Key = StringLeft($s_Line, StringInStr($s_Line, ";")) ; erste Spalte auslesen
$dic_CSV1($s_Key) = $s_Line ; erste Spalte als Key und ganze Zeile als Value in das Dictionary eintragen
NextFor $s_Line In FileReadToArray($s_CSV2) ; zweite Datei zeilenweise durchgehen
[/autoit] [autoit][/autoit] [autoit]
$s_Key = StringLeft($s_Line, StringInStr($s_Line, ";")) ; erste Spalte auslesen
If $s_Key == "" Then ContinueLoop ; Bei Fehler diesen Schleifendurchlauf überspringen
If $dic_CSV1.Exists($s_Key) Then ; Check ob Wert schon in der ersten CSV vorhanden war
$dic_CSV1.Remove($s_Key) ; Falls ja diesen Wert aus Dictionary löschen
ContinueLoop ; Die Schleife hier abbrechen und beim nächsten Fortsetzen (=kein Schreiben auf $s_Out)
EndIf
$s_Out &= $s_Line & @CRLF ; Zeile zu $s_Out hinzufügen
NextFor $s_Key in $dic_CSV1.Keys() ; Alle Keys des Dictionarys durchgehen
[/autoit] [autoit][/autoit] [autoit]
$s_Out &= $dic_CSV1($s_Key) & @CRLF ; Die mit den Keys verknüpften Daten (=die Zeilen) $s_Out ebenfalls noch hinzufügen
Next; $s_Out in Datei schreiben:
[/autoit]
FileDelete($s_CSVOut)
FileWrite($s_CSVOut, StringTrimRight($s_Out, 2)) ; StringTrimRight um letztes unnötiges @CRLF zu entfernen -
-
-
Hallo
AspirinJunkie,vielen Dank für deine Hilfe,
bei deinem Script erhalte ich folgende Fehlermeldung:
Line 9
Unknowdn funktion nameDie Version ist 3.3.8.1
-
Hallo Kanashius,
Wenn ich das Script starte, kommt ein Öffnen-Dialog und wenn ich dort eine Datei auswähle, erhalte ich eine Fehlermeldung:
Line 6 _FileReadToArray($file,$data,0)
^ ErrorError: Incorrect number of parameters in function call.
Den FileOpenDialog könnten wir eigentlich auch weglassen, würde reichen, wenn er "Datei1.csv" und "Datei2.csv" lädt und dann das Ergebnis hinterher in "Datei3.csv" speichert.
Das Script und die Dateien liegen alle in dem Ordner "Test" auf dem Desktop. -
Ok, vielen Dank euch beiden schonmal.
Bekomme bei dem Script schon in der zweiten Zeile nen Fehler ausgegeben.
Habe es dann doch lieber in der Jobbörse gepostet.
[ neu ] Inhalt von 2 Dateien zusammen führen, nach Duplikaten suchen und löschen
-
Hallo,
ich habe 2 csv-Dateien, diese würde ich gerne zusammenführen und danach doppelte einträge löschen. Hier kann es aber sein, dass nur die erste Spalte einer Zeile den selben Wert enthält, trotzdem soll dann die ganze Zeile gelöscht werden.
Beispiel:
Die erste Datei enthält:
AAA;123;456;
BBB;789;012;Die zweite Datei enthält:
CCC;345;678;
AAA;901;234;Zusammgeführt sollte es dann so aussehen:
AAA;123;456;
BBB;789;012;
CCC;345;678;
AAA;901;234;und dann sollte nach doppelten Werten in der ersten Spalte gesucht werden und dann die entsprechende Zeile gelöscht werden:
BBB;789;012;
CCC;345;678;Ich hatte hier so an _FileReadToArray gedacht. Es handelt sich aber um ca. 35000 Datensätze.
Hat jemand sowas vielleicht schonmal gemacht und könnte ein Beispiel-Script posten?
Vielen Dank.
-
Hallo,
ich habe 2 csv-Dateien, diese würde ich gerne zusammenführen und danach doppelte einträge löschen. Hier kann es aber sein, dass nur die erste Spalte einer Zeile den selben Wert enthält, trotzdem soll dann die ganze Zeile gelöscht werden.
Beispiel:
Die erste Datei enthält:
AAA;123;456;
BBB;789;012;Die zweite Datei enthält:
CCC;345;678;
AAA;901;234;Zusammgeführt sollte es dann so aussehen:
AAA;123;456;
BBB;789;012;
CCC;345;678;
AAA;901;234;und dann sollte nach doppelten Werten in der ersten Spalte gesucht werden und dann die entsprechende Zeile gelöscht werden:
BBB;789;012;
CCC;345;678;Ich hatte hier so an _FileReadToArray gedacht. Es handelt sich aber um ca. 35000 Datensätze.
Hat jemand sowas vielleicht schonmal gemacht und könnte ein Beispiel-Script posten?
Vielen Dank.