Neu Automatisierter Import TXT zu CSV bzw. TXT automatisierte anpassungen

gccm.ch

Aktives Mitglied
28. Mai 2018
79
1
Hallo Zusammen

Wir haben verschiedene Lieferanten welche uns die Artikeldaten sowie Lagerbestände etc. als TXT zukommen lassen.
Das Problem besteht darin, dass die meisten eine für Ihren Shop angepasste TXT ausgeben sprich worin für uns viele Sachen irrelevant sind.
Bei einem Import von über 100'000 Artikeln haben wir festgestellt, dass je schlanker die TXT beim Import ist desto schneller geht es.
Sprich ein Import konnten wir von 3.5h auf 2h reduzieren indem wir Manuel die TXT bearbeitet haben.
Dies möchten wir nun Automatisieren, da wir schon automatisch die Daten herunterladen können und mit der Ameise ja importieren.

Jemand eine Idee wie wir automatisiert die TXT Daten anpassen können?
Uns wäre eine kostenlose Lösung am Sympatisten :)

Vielen Dank.

Liebe Grüsse
 

lj-shadow

Sehr aktives Mitglied
15. März 2013
458
46
Ich mach das auf 'ner virtuellen Linux Maschine mit der Shell per Script.
5x täglich daten holen, anpassen und in einem netzwerkshare bereit stellen.
Teilweise geht das so gut, dass einige importe vollautomatisch laufen können.
Je nachdem wie die Datei aussieht, geht das recht fix.
 

gccm.ch

Aktives Mitglied
28. Mai 2018
79
1
Welche Distribution verwendest du?
Wie ist das Skript? Ich habe bislang nicht wirklich mit Linux gearbeitet :)
 

_simone_

Sehr aktives Mitglied
17. Februar 2013
3.240
452
Emsland
Firma
Notun Delend
Automatisiert bearbeiten ist auch gut mit DOS-Batch-Skript möglich; gerade bei CSV/TXT.
Da müsste man kein Linux installieren, wenn man es nicht kennt.
 

lj-shadow

Sehr aktives Mitglied
15. März 2013
458
46
Ohh...
Auf einmal bewegung hier...

Linux hatte ich aus 2 Gründen genommen:

A: Der Server läuft damit -> ist also schon da...
B: Wollte es lernen - zumindest mir selbst helfen zu können

Die Virtuelle Maschine hat sich dann später ergeben, damit das nicht mehr der Webserver macht sonder hier im LAN direkt verfügbar ist.

Zum Spalten löschen...
Stell dir vor, Du hast 'ne CSV mit Spaltentrenner ; (Semikolon) und 20 Spalten.
Spalte 1 ist die Artikelnummer, gefolgt von 19 Spalten.

Du Brauchst aber nur Spalte 1 (für die Ameise zum erkennen) und zb. die Lagermenge Deines Lieferanten in Spalte 17.
Dann sieht unter Linux (zB Ubuntu/Debian) Dein Befehl so aus:

Code:
cut -d\; -f1,17 ./datei_vom_lieferanten.csv > lagermenge.csv

Hier wird die Datei "datei_vom_lieferanten.csv" eingelesen, alles ausser Spalte 1 und 17 entfernt und als Datei "lagermenge.csv" gespeichert


EDIT:
awk bzw. gawk leisten auch sehr gute Dienste und sind speziell für solche Fälle da
 
Zuletzt bearbeitet:

lj-shadow

Sehr aktives Mitglied
15. März 2013
458
46
Noch was hierzu:
Wie ist das Skript? Ich habe bislang nicht wirklich mit Linux gearbeitet :)

Es gibt da - soweit ich weiß - kein "fertiges" Script. Das musst du dir selber schreiben. Geht aber mit Linux Bordmitteln. Immer Excel nervt halt, wenn es immer die gleiche Arbeit ist.
Mittlerweile bin ich bei > 48.000 kB - wobei die Hälfte sicher Doku ist
Mit etwas Zeit und Interesse daran, macht das sogar richtig Spaß - vor allem, wenn man dann die Ergebnisse sieht und die (fast) perfekt laufen.
 

gccm.ch

Aktives Mitglied
28. Mai 2018
79
1
Heyho

Danke für die Ideen.
ich habe es jetzt mal so gemacht:


set "txt=ArtikelPreisdatenV2.txt"
set "temp= WAWI.txt"
for /f "tokens=1-24 delims= " %%a in (%txt%) do echo %%a %%c %%j %%k %%M >> %temp%

Unter Windows, aber irgendwie stimmt es noch nicht so ganz.
Es übernimmt teilweise noch immer falsche Spalten.. :-/ zugleich sind falsche Spalten (also welche ich benötige) nicht mehr vorhanden.
 

lj-shadow

Sehr aktives Mitglied
15. März 2013
458
46
Hast du ein Leerzeichen als Trenner?

Edit:
Wenn dem so ist, würde ich vermuten, dass ein/mehrere "Spalten" deiner CSV/Textdatei einen Wert enthalten, der ein Leerzeichen enthält.
Somit erkennt die Schleife im Batchfile die falsche Stelle und zerhackt dir das Ergebnis.

Zweite Vermutung / Noch was zu "Leerzeichen":
Ich habe bei 2 Dateien, die ich bekomme, NULL-Chars drin. Die "sieht" man nicht, wenn man mit dem Windows Editor die Datei öffnet.
Schau mal in die Datei mit Notepad++ rein (Option "Nicht sichtbare Zeichen anzeigen" muss aktiv sein). Dann erkennst Du ob die drin sind.
Wenn ja, kann es Dir passieren, dass Dein Batch an dieser/diesen Stelle/n aus dem Tritt kommt. Falls dies der Fall ist, muss du die VOR der oben genannten Schleife entfernen.
 
Zuletzt bearbeitet:

gccm.ch

Aktives Mitglied
28. Mai 2018
79
1
Vielen Dank für den Hinweis.
Aktuell habe ich das Skript so verändert:


set "txt=ArtikelPreisdatenV2.txt"
set "temp= WAWI.csv"
for /f "tokens=1-24 delims= " %%a in (%txt%) do echo %%a %%c %%j %%k %%m >> %temp%

Ich habe 3 Änderungen in diesem sinne gemacht:
1. Ausgabe Datei in eine CSV umgewandelt (Da bei TXT alles in eine Spalte fällt)
2. Der abstand ist gemäss Notepad nicht ein Abstand sondern ähnlich wie ein "Tapstop" - übernimmt er hier leider nicht im Forum
3. das für die Spalte m von gross auf klein geändert, da er sonst immer %M auf jede Linie geschrieben hatte.

Jetzt habe ich jedoch festgestellt, dass er nicht mehr sauber Trennt und manchmal endet alles in einer Spalte, dann wieder aufgeteilt usw.
Kann man ihm irgendwie noch mitteilen, dass er den "Tapstop" durch ein ; ersetzten soll?

Vielen Dank!

PS:
Gemäss Notepad ist jede Zeile nun mit einem CR LF fertig.. Keine Ahnung ob so etwas relevant ist.


EDIT:
So habe es nun mit einem VBS Skript weiter bekommen:
VBS Skript:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
Const ForWriting = 2
' Datei öffnen und Text einlesen und schließen
Set objFile = objFSO.OpenTextFile("ArtikelPreisdatenV2.txt", ForReading)
strText = objFile.ReadAll
objFile.Close
' Änderungen am Inhalt
strNewText = Replace(strText, " ", ";")
strNewText = Replace(strNewText, " ", ";")
' Neue Datei erstellen mit neuen Inhalten füllen
set resultFile = objFSO.CreateTextFile("temp.txt", true)
resultFile.WriteLine strNewText
resultFile.Close

Batch:
entfernen.vbs
set "temp=temp.txt"
echo Output File Setzen
set "output=wawiimport.txt
for /f "tokens=1-24 delims=;" %%a in (%temp%) do echo %%a %%c %%j %%k %%m >> %output%


Nun die Problematik:
Er setzt ersetzt jetzt den "Tapstop" korrekt durch ein ; jedoch im zweiten schritt (in welchem jetzt die spalten stimmen würden) entfernt er beim entfernen der Spalten auch gleich wieder das ;

Selbst wenn ich versuche im ersten schritt mit , zu arbeiten, wird mir ein "Tapstop" wieder eingefügt und die Datei "einfach durchgegeben"

Habt ihr noch weitere Ideen?
 
Zuletzt bearbeitet:

lj-shadow

Sehr aktives Mitglied
15. März 2013
458
46
Hmmm...
Versuche mal deinen obersten Ansatz ohne das Script noch mal so:

...delims=\t"
(Sorry, einfügen ging mit Handy gerade nicht)...

Also ohne es vorher auf semikolon zu ändern.
Bei Windows weiß ich da leider sonst nicht weiter. Bei Linux bin ich da wohl schon eingespielter
 
Zuletzt bearbeitet:

gccm.ch

Aktives Mitglied
28. Mai 2018
79
1
Wenn ich mit dem t mache, öffnet sich bei mir die batch gar nicht mehr.. :(

Habe es jetzt mal so hinbekommen:
VBS:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
Const ForWriting = 2
' Datei öffnen und Text einlesen und schließen
Set objFile = objFSO.OpenTextFile("ArtikelPreisdatenV2.txt", ForReading)
strText = objFile.ReadAll
objFile.Close
' Änderungen am Inhalt
strNewText = Replace(strText, " ", ";,")
strNewText = Replace(strNewText, " ", ";,")
' Neue Datei erstellen mit neuen Inhalten füllen
set resultFile = objFSO.CreateTextFile("temp.txt", true)
resultFile.WriteLine strNewText
resultFile.Close

(hierbei setze ich ja ein ; und ein ,

Skript:
set "temp=temp.txt"
set "output=nochmalbearbeiten.txt
entfernen.vbs
for /f "tokens=1-24 delims=," %%a in (%temp%) do echo %%a %%c %%j %%k %%m >> %output%

wobei das Endergebnis jetzt mit ; getrennt ist (welches ich wollte) jedoch noch immer die Problematik besteht, dass nicht alle Zeilen korrekt zur Spalte stimmt..

Nochmal eine Idee? :)
 

lj-shadow

Sehr aktives Mitglied
15. März 2013
458
46
Ehrlich gesagt, nein.
Ich wäre noch immer bei der Vermutung, dass irgendwo in den "gewollten Daten" ein Zeichen bei ist, dass als trenner genutzt wird. Bei dem replace änderst du es ja mit und nimmst den Fehler mit.

Das \t definiert unter Linux den tab...
Du könntest mal nachsehen, wie der unter Windows erkannt wird.
Möglichkeiten wären zb:

<TAB>
%TAB%
`t

Die könntest du statt dem \t noch probieren.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Automatisierter Import Händler-CSV, Problem mit unterschiedlichen Artikeln bei gleicher EAN Schnittstellen Import / Export 7
Neu Umlagerung per Ameisen-Import JTL-Wawi - Fehler und Bugs 1
Neu JTL 1.8.12.0 - Artikelattribut für Shop importieren - Format CSV-Datei / Hilfe bei Import von individuellen Attributen für JTL-Shop (googlekat) JTL-Ameise - Ideen, Lob und Kritik 1
Ameisen Import von Aufträgen: Zahlungsziel in Tagen immer 0 JTL-Wawi 1.8 1
Automatisches MHD bei Import JTL-Wawi 1.8 1
Neu Import von sonderpreisen JTL-Ameise - Fehler und Bugs 1
Neu ebay Import ohne Variantenbilder eBay-Anbindung - Fehler und Bugs 0
Beschreibung wird beim Import fehlerhaft übernommen JTL-Wawi 1.8 0
Neu Ameise - Logikfrage zum Import von Artikeln mit und ohne Varkombis gemäß Guide User helfen Usern - Fragen zu JTL-Wawi 0
Neu JTL Ameise Import von Meta-Descriptions Schnittstellen Import / Export 6
Neu Nach Import von Kundendaten aus SW5 Umleitung nach Login und weiße Seite JTL-Shop - Fehler und Bugs 5
Neu Bitte um Hilfe beim Export/Import von Attributen JTL Ameise - Eigene Exporte 0
Neu Zahlungsart beim Import ändern User helfen Usern - Fragen zu JTL-Wawi 0
Neu Mindestabnahme / Abnahmeintervall Import mittels Ameise User helfen Usern - Fragen zu JTL-Wawi 1
Neu Export & Import Lagerplätze JTL Ameise - Eigene Exporte 7
Neu Shopdaten import funktioniert nicht Shopware-Connector 2
Neu Import von Blogseiten undLandingpages von Magento Umstieg auf JTL-Shop 3
Neu CiN TrackID-Import Plugin User helfen Usern - Fragen zu JTL-Wawi 12
Label per Import bedienen JTL-Wawi 1.8 0
Neu Auftrag aus Woocommerce Import zeigt im Druck "Zahlungsziel beträgt 150 Tage ab Rechnungsdatum" User helfen Usern - Fragen zu JTL-Wawi 0
Neu Ameise Import manuell ausgeführt funktioniert, der gleiche Import über Batch Planung gestartet hat Fehler JTL-Ameise - Fehler und Bugs 2

Ähnliche Themen