Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

TXT Datei automatisch auslesen und in neue Datei schreiben

Frage Entwicklung Batch & Shell

Mitglied: ullimon

ullimon (Level 1) - Jetzt verbinden

13.07.2010, aktualisiert 16:39 Uhr, 3895 Aufrufe, 11 Kommentare

Hallo zusammen,
ich habe leider über die SuFu nicht direkt die Antwort auf mein Problem gefunden.
Ich möchte gerne eine txt Datei auslesen und bestimmte Zeilen in eine neue txt bzw. csv übernehmen um hiermit ein Prosuktkatalog via MS Publisher zu erstellen.

folgende Datei liegt mir vor:

vcom.imp

der Inhalt spiegelt eine Artikelliste wieder (Artikelnummer, Artikelbezeichnung inkl. Gewicht, Preis)

Die Zeilen eines Artikels sehen wie folgt aus:

01.
101,110,(12),'Holzofenbrot 1000 g 
02.
101,110,(12:2),'' 
03.
101,110,(14),3 
04.
101,110,(434),3 
05.
101,110,(13),2.60 
06.
101,110,(417), 
07.
101,110,(21),0 
08.
101,110,(416),0 
09.
101,110,(416:2),0 
10.
101,110,(416:3),0 
11.
101,110,(474),0
nach der letzten Zeile kommt direkt der nächste Artikel.

Mein Ziel ist es jetzt folgende Spalten zu erstellen und mit Daten aus der txt zu füttern:

01.
Artikelnummer, Bezeichnung, Gewicht, Preis, Bildpfad
Artikelnummer ist das 2.te Feld (hier im Bsp. die 110)

Bezeichnung ist das Feld nach der Position (12) (Ist es hier möglich das Gewicht wegzulassen (1000 g) und dies in eine extra Spalte zu schreiben? Gewicht kommt nicht bei jedem Artikel vor.

Gewicht steht leider in der Bezeichnung fest mit drin, falls nicht trennbar dann die Bezeichnung inkl. Gewicht übernehmen.

Preis ist das Feld nach (13) (hier 2.60)

Bildpfad kommt in der txt nicht vor sollte aber aus der jeweiligen Artikelnummer inkl. z:\Daten\Katalog\Bilder\*.jpg oder*.png in der csv stehen (also hier dann 110.jpg bzw. 110.png)

Die csv sollte dann so aussehen:

01.
110; Holzofenbrot 1000 g; 2,60; z:\Daten\Katalog\Bilder\110.jpg
Besser

01.
110; Holzofenbrot; 1000 g; 2,60; z:\Daten\Katalog\Bilder\110.jpg
Vielen Dank schon mal im voraus und ich hoffe es ist verständlich geschrieben.

Grüße

Ullimon
Mitglied: mathe172
13.07.2010 um 17:57 Uhr
Hallo Ullimon

Könntest du vielleicht einmal einen Ausschnitt nicht nur mit einem sondern mit ca. 3 aneinanderhängenden Produkten zeigen? Und was bedeutet eigentlich die 101 und die Zahlen in Klammern(Sind das die Markierung die anzeigt wo der Preis usw. steht?)? Und die Zeilen dazwischen (z.B. die mit (12:2)), sind das informationen die nicht in die csv sollen?

Mathe172
Bitte warten ..
Mitglied: ullimon
13.07.2010 um 21:20 Uhr
Hallo Mathe172,

hier ein Auszug aus der txt Datei insgesammt hat die Datei 83,5KB:

01.
101,110,(12),'Holzofenbrot 1000 g' 
02.
 
03.
101,110,(12:2),'' 
04.
 
05.
101,110,(14),3 
06.
 
07.
101,110,(434),3 
08.
 
09.
101,110,(13),2.60 
10.
 
11.
101,110,(417), 
12.
 
13.
101,110,(21),0 
14.
 
15.
101,110,(416),0 
16.
 
17.
101,110,(416:2),0 
18.
 
19.
101,110,(416:3),0 
20.
 
21.
101,110,(474),0 
22.
 
23.
101,111,(12),'Mischbrot 500 g' 
24.
 
25.
101,111,(12:2),'' 
26.
 
27.
101,111,(14),3 
28.
 
29.
101,111,(434),3 
30.
 
31.
101,111,(13),1.45 
32.
 
33.
101,111,(417), 
34.
 
35.
101,111,(21),0 
36.
 
37.
101,111,(416),0 
38.
 
39.
101,111,(416:2),0 
40.
 
41.
101,111,(416:3),0 
42.
 
43.
101,111,(474),0 
44.
 
45.
101,113,(12),'Mischbrot 1000 g' 
46.
 
47.
101,113,(12:2),'' 
48.
 
49.
101,113,(14),3 
50.
 
51.
101,113,(434),3 
52.
 
53.
101,113,(13),2.40 
54.
 
55.
101,113,(417), 
56.
 
57.
101,113,(21),0 
58.
 
59.
101,113,(416),0 
60.
 
61.
101,113,(416:2),0 
62.
 
63.
101,113,(416:3),0 
64.
 
65.
101,113,(474),0 
66.
 
67.
101,115,(12),'Kümmelbrot 500 g' 
68.
 
69.
101,115,(12:2),'' 
70.
 
71.
101,115,(14),3 
72.
 
73.
101,115,(434),3 
74.
 
75.
101,115,(13),1.50 
76.
 
77.
101,115,(417), 
78.
 
79.
101,115,(21),0 
80.
 
81.
101,115,(416),0 
82.
 
83.
101,115,(416:2),0 
84.
 
85.
101,115,(416:3),0 
86.
 
87.
101,115,(474),0 
88.
 
89.
101,116,(12),'Jägerbrot 500 g' 
90.
 
91.
101,116,(12:2),'' 
92.
 
93.
101,116,(14),3 
94.
 
95.
101,116,(434),3 
96.
 
97.
101,116,(13),1.60 
98.
 
99.
101,116,(417), 
100.
 
101.
101,116,(21),0 
102.
 
103.
101,116,(416),0 
104.
 
105.
101,116,(416:2),0 
106.
 
107.
101,116,(416:3),0 
108.
 
109.
101,116,(474),0 
110.
 
Die Zahlen in Klammern sind denke ich Markierungen.

Die Zeilen wo ich nicht genannt habe brauche ich nicht. Was die Zahlen teilweise bedeuten weiß ich leider nicht, ich benötige diese auch nicht.

Achso, hatte ich vergessen, lauffähig sollte das ganze wenn möglich unter Windows sein.

Grüße

Ullimon
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 23:01 Uhr
Hallo Ullimon,

für die Gewichttrennung hab ich heute keinen Nerv mehr, aber dieser Batch:
01.
:: ullimon.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de  2010-07-13 
03.
@echo off&setlocal EnableDelayedExpansion 
04.
chcp 1252 >NUL 
05.
Set Artikel=Artikel.txt 
06.
For /F "tokens=2-4 delims=,()'" %%A in ( 
07.
  'Findstr "(12) (13)" %Artikel% ' 
08.
   ) Do Call :ProcLine %%A %%B "%%C%" 
09.
Call :OutLine 
10.
Goto :Eof 
11.
:ProcLine 
12.
:: @Echo %* 
13.
If defined LastArt if %LastArt%. NEQ %1. Call :OutLine 
14.
Set "LastArt=%1" 
15.
Set "X_%2=%~3" 
16.
Goto :Eof 
17.
:OutLine 
18.
Echo %LastArt%; %X_12%; !X_13:.=,!; z:\Daten\Katalog\Bilder\%LastArt%.jpg
(Zeile 5 bitte anpassen)
erzeugt mir diese Ausgabe:
22:52:19 ++D:\Test\2010-07\13____________________ 
>Ullimon.cmd 
110; Holzofenbrot 1000 g; 2,60; z:\Daten\Katalog\Bilder\110.jpg 
111; Mischbrot 500 g; 1,45; z:\Daten\Katalog\Bilder\111.jpg 
113; Mischbrot 1000 g; 2,40; z:\Daten\Katalog\Bilder\113.jpg 
115; Kümmelbrot 500 g; 1,50; z:\Daten\Katalog\Bilder\115.jpg 
116; Jägerbrot 500 g; 1,60; z:\Daten\Katalog\Bilder\116.jpg
Gruß
LotPings
Bitte warten ..
Mitglied: mathe172
14.07.2010 um 11:23 Uhr
Hallo zusammen!

Ich hab die Datei von LotPings abgeändert (hoffe ich darf das ), sodass jetzt das gewicht in eine extraspalte kommt.

01.
:: ullimon.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de  2010-07-13 
03.
@echo off&setlocal EnableDelayedExpansion 
04.
chcp 1252 >NUL 
05.
Set Artikel=articles.txt 
06.
For /F "tokens=2-4 delims=,()'" %%A in ( 
07.
  'Findstr "(12) (13)" %Artikel% ' 
08.
   ) Do Call :ProcLine %%A %%B "%%C%" 
09.
Call :OutLine 
10.
Goto :Eof 
11.
:ProcLine 
12.
:: @Echo %* 
13.
If defined LastArt if %LastArt%. NEQ %1. Call :OutLine 
14.
Set "LastArt=%1" 
15.
Set "X_%2=%~3" 
16.
Goto :Eof 
17.
:OutLine 
18.
echo %X_12%>last_art.txt 
19.
for /f "tokens=1,2" %%I in ('findstr " g" last_art.txt') do ( 
20.
set X_12=%%I 
21.
set "weight=%%J g" 
22.
23.
Echo %LastArt%; !X_12!; %weight%; !X_13:.=,!; z:\Daten\Katalog\Bilder\%LastArt%.jpg 
24.
set "weight="
Mathe172
Bitte warten ..
Mitglied: LotPings
14.07.2010 um 11:46 Uhr
Zitat von mathe172:
Ich hab die Datei von LotPings abgeändert (hoffe ich darf das ),
Hallo Mathe172, kein Problem - im Gegenteil Verbesserungen sind immer willkommen.

:OutLine 
echo %X_12%>last_art.txt 
for /f "tokens=1,2" %%I in ('findstr " g" last_art.txt') do ( 
set X_12=%%I 
set "weight=%%J g" 
)
Die externe Datei lässt sich vermeiden wenn du das Echo mit einer Escape'ten Pipe ^| in die Schleife direkt vor den findstring setzt.
:OutLine 
for /f "tokens=1,2" %%I in ('echo.%X_12%^|findstr " g$" ') do (
Du gehst bei deinem Ansatz von nur einem Wort für den Artikel und von " g" irgendwo in der Zeile aus - das kann, muss aber nicht zutreffen.
Bevor wir da weiter spekulieren ist IMO der OP nach einem Feedback gefragt.

Gruß
LotPings
Bitte warten ..
Mitglied: mathe172
14.07.2010 um 13:30 Uhr
Hallo Lotpings!

Was die Sache mit dem " g"und dem Problem, dass das Produkt nicht nur ein Wort haben muss, angeht, bin ich deiner Meinung. Bei dem mit " g" könnte man folgendes machen (weiss leider nicht ob das " g$" genau das macht):

01.
:OutLine 
02.
product=%X_12%/ 
03.
for /f "tokens=1,2" %%I in ('echo.%product%^|findstr " g/" ') do (
Also, dass man am Ende von %X_12% ein Zeichen setzt, das nicht im Produktnamen sein sollte und dann nach " g'Zeichen'" sucht.

Mathe172
Bitte warten ..
Mitglied: LotPings
14.07.2010 um 14:09 Uhr
Zitat von mathe172:
Bei dem mit " g" könnte man folgendes machen (weiss leider nicht ob das " g$" genau das macht):
Doch, genau das tut es siehe auch findstr /?
Alternativ ginge auch
for /f "tokens=1,2" %%I in ('echo.%product%^|findstr /B /L " g" ') do (
ist auch besser, da findstr by default im RegEx-Modus ist, und da werden mit dem Leerzeichen mehrere alternative Suchstrings getrennt, es wird also ignoriert.
echo xxxgxxx|findstr " g"
würde auch einen hier nicht gewünschten Treffer ergeben.

Gruß
LotPings
Bitte warten ..
Mitglied: ullimon
14.07.2010 um 14:10 Uhr
Hallo Mathe172 und LotPings,

vielen Dank für eure Mühen. Bis jetzt funktioniert es genauso wie gewünscht, nur muß ich LotPings zustimmen. Es gibt Zeilen in welcher vor dem "g" ein anderes Wort steht. Zum Beispiel
"Altbadisches Landbrot 4000 g" --> hier kommt dann

01.
Altbadisches; Landbrot g
bei raus.

Den Befehl habe ich wie folgt ausgeführt:

01.
ullimon.cmd > artikel.csv
Folgenden Code habe ich benutzt:

01.
:: ullimon.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de  2010-07-13 
03.
@echo off&setlocal EnableDelayedExpansion 
04.
chcp 1252 >NUL 
05.
Set Artikel=articles.txt 
06.
For /F "tokens=2-4 delims=,()'" %%A in ( 
07.
  'Findstr "(12) (13)" %Artikel% ' 
08.
   ) Do Call :ProcLine %%A %%B "%%C%" 
09.
Call :OutLine 
10.
Goto :Eof 
11.
:ProcLine 
12.
:: @Echo %* 
13.
If defined LastArt if %LastArt%. NEQ %1. Call :OutLine 
14.
Set "LastArt=%1" 
15.
Set "X_%2=%~3" 
16.
Goto :Eof 
17.
:OutLine 
18.
echo %X_12%>last_art.txt 
19.
for /f "tokens=1,2" %%I in ('findstr " g" last_art.txt') do ( 
20.
set X_12=%%I 
21.
set "weight=%%J g" 
22.
23.
Echo %LastArt%; !X_12!; %weight%; !X_13:.=,!; z:\Daten\Katalog\Bilder\%LastArt%.jpg 
24.
set "weight="
Grüße Ullimon
Bitte warten ..
Mitglied: LotPings
14.07.2010 um 14:18 Uhr
Hallo ullimon,

  • Ist denn immer ein Gewicht vorhanden ?
  • Ist die Einheit immer g ?
  • sind die Zahlen ggfs mit einem Tausendertrenner versehen?

Gruß
LotPings
Bitte warten ..
Mitglied: mathe172
14.07.2010 um 15:09 Uhr
Hallo zusammen!

@LotPings: Ein Gewicht ist wahrscheinlich nicht immer vorhanden, siehe Holzofenbrot; Art. 110

Mit dem hier müsste es gehen (solange der Produktname nicht mehr als 3 Worte hat, liesse sich jedoch erweitern):
01.
:: ullimon.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de  2010-07-13 
03.
@echo on&setlocal EnableDelayedExpansion 
04.
chcp 1252 >NUL 
05.
Set Artikel=articles.txt 
06.
For /F "tokens=2-4 delims=,()'" %%A in ( 
07.
  'Findstr "(12) (13)" %Artikel% ' 
08.
   ) Do Call :ProcLine %%A %%B "%%C%" 
09.
Call :OutLine 
10.
Goto :Eof 
11.
:ProcLine 
12.
:: @Echo %* 
13.
If defined LastArt if %LastArt%. NEQ %1. Call :OutLine 
14.
Set "LastArt=%1" 
15.
Set "X_%2=%~3" 
16.
Goto :Eof 
17.
:OutLine 
18.
echo %X_12%>last_art.txt 
19.
for /f "tokens=1-4" %%I in ('findstr " g" last_art.txt') do ( 
20.
set X_12=%%I 
21.
set /a check=%%J 
22.
if !check!==%%J set "weight=%%J g" & set "X_12=%%I" 
23.
set /a check=%%K 
24.
if !check!==%%K set "weight=%%K g" & set "X_12=%%I %%J" 
25.
set /a check=%%L 
26.
if !check!==%%L set "weight=%%L g" & set "X_12=%%I %%J %%K" 
27.
28.
Echo %LastArt%; !X_12!; %weight%; !X_13:.=,!; z:\Daten\Katalog\Bilder\%LastArt%.jpg>>articles.csv 
29.
set "weight="
Wahrscheinlich überseh ich was, aber dieser Code funktioniert im Gegensatz zum älteren nicht mit dem von LotPings...

Mathe172
Bitte warten ..
Mitglied: LotPings
14.07.2010 um 16:05 Uhr
So dies scheint zu klappen:
01.
:: ullimon.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::: 
02.
:: LotPings  administrator.de  2010-07-14 
03.
@echo off&setlocal EnableDelayedExpansion 
04.
chcp 1252 
05.
Set "Z=-1" & Set "Weight= " 
06.
Set Artikel=Artikel.txt 
07.
For /F "tokens=2-4 delims=,()'" %%A in ( 
08.
  'Findstr "(12) (13)" %Artikel% ' 
09.
   ) Do Call :ProcLine %%A %%B "%%C%" 
10.
Call :OutLine 
11.
Goto :Eof 
12.
:ProcLine 
13.
:: @Echo %* 
14.
If defined LastArt if %LastArt%. NEQ %1. Call :OutLine 
15.
Set "LastArt=%1" 
16.
Set "X_%2=%~3" 
17.
Goto :Eof 
18.
:OutLine 
19.
If " g" NEQ "%X_12:~-2%" Goto :OutL2 
20.
Set /A "Z-=1,Y=Z+1" 
21.
If "!X_12:~%Z%,1!" LSS "A" Goto :OutLine 
22.
Set "Weight=!X_12:~%Y%!" & Set "X_12=!X_12:~0,%Y%!" & Set Z=-1 
23.
:OutL2 
24.
Echo %LastArt%; %X_12%;%weight%; !X_13:.=,!; z:\Daten\Katalog\Bilder\%LastArt%.jpg 
25.
set "weight= "
Bei der Ausgabe wird geprüft ob die letzten beiden Stellen des Artikels " g" enthalten,
  • wenn ja, wird solange ein Zähler von hinten erhöht bis ein Zeichen nicht kleiner als "A" ist.
Das schliesst alle Ziffern Punkt Koma Leerzeichen etc ein.
Der gefundene Wert -1 wird als Splitter benutzt.
  • wenn nein wird die Zeile so mit einem Leerzeichen für Weight ausgegeben.

Gruß
LotPings
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
POWERSHELL txt auslesen mit csv oder mdb abgleichen und zusammen in neue datei schreiben
Frage von loannaBatch & Shell4 Kommentare

Hallo an alle Powersheller, brauche dringend Hilfe. Muss als Notlösung ein Script schreiben welches die unten aufgeführten Dinge abfrägt ...

Batch & Shell
Dateinamen mit vbs auslesen und in eine TXT Datei schreiben
gelöst Frage von KeiosIDBatch & Shell5 Kommentare

Hallo, ich hoffe mal, das ist das richtige Unterforum. Nach diversen suchen und Hilfe aus einem Windows Scripting Buch ...

Entwicklung
Mehrere txt Dateien in Excel schreiben
gelöst Frage von steinbock86Entwicklung15 Kommentare

Hallo Kennt sich jemand mit vb skripten aus? Habe mehrere txt Dateien die müssen ausgelesen werden und in ein ...

VB for Applications
Inhalt einer Textbox in eine .txt Datei schreiben
gelöst Frage von Just4fun1990VB for Applications4 Kommentare

Hallo Administrator.de User, ich habe jetzt schon sehr lange gesucht und finde leider nichts. Hier allerdings habe ich gute ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 19 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 21 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Sichere Remote Desktop Verbindung wie?
gelöst Frage von nuss33Windows Server11 Kommentare

Hallo zusammen, eins vorweg: Ich besitze einen privaten Windows Server 2008 R2 zu Hause im Netzwerk er wird nicht ...