In eine TXT eine Zeile Einfügen und eine Counter in den folgenden Zeilen
Ich hab hier gute Erfahrungen gemacht und
wende mich nun wieder an euch.
Hallo,
Ich habe hier einen Handscanner (mobile) bei dem ich es nicht mit der Hersteller Software hinbekomme
das gewünschte Ergebnis zu erziehlen.
Hier ein Beispiel wie die Datei sein sollte:
K;Warenentnahme;10007;
D;1;4040056000759;20;Ja
D;2;4040056001169;10;Ja
Hier wie ich sie vom Scanner bekomme:
D;4040056000759;20;Ja
D;4040056001169;10;Ja
Wie man sieht fehlt die erste Zeile in der Datei
und in den folgezeilen die fortlaufende Nummer der Datensätze.
Ich könnte hier nur eine Zahl angeben, die immer gleich ist.
etwa so: (mit einer Null)
D;0;4040056000759;20;Ja
D;0;4040056001169;10;Ja
Ich hab jetzt an eine Batch gedacht, die mir die fehlen Daten einträgt.
Ist es überhaupt möglich mit einer Batch?
Bin für jede Hilfe Dankbar
wende mich nun wieder an euch.
Hallo,
Ich habe hier einen Handscanner (mobile) bei dem ich es nicht mit der Hersteller Software hinbekomme
das gewünschte Ergebnis zu erziehlen.
Hier ein Beispiel wie die Datei sein sollte:
K;Warenentnahme;10007;
D;1;4040056000759;20;Ja
D;2;4040056001169;10;Ja
Hier wie ich sie vom Scanner bekomme:
D;4040056000759;20;Ja
D;4040056001169;10;Ja
Wie man sieht fehlt die erste Zeile in der Datei
und in den folgezeilen die fortlaufende Nummer der Datensätze.
Ich könnte hier nur eine Zahl angeben, die immer gleich ist.
etwa so: (mit einer Null)
D;0;4040056000759;20;Ja
D;0;4040056001169;10;Ja
Ich hab jetzt an eine Batch gedacht, die mir die fehlen Daten einträgt.
Ist es überhaupt möglich mit einer Batch?
Bin für jede Hilfe Dankbar
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 184211
Url: https://administrator.de/forum/in-eine-txt-eine-zeile-einfuegen-und-eine-counter-in-den-folgenden-zeilen-184211.html
Ausgedruckt am: 24.12.2024 um 14:12 Uhr
9 Kommentare
Neuester Kommentar
Hallo Underdog81!
Unter der Annahme, das die Textzeile immer mit "D;" beginnt, könnte es mit diesem (*.vbs)-Skript funktionieren:
Gruß Dieter
Unter der Annahme, das die Textzeile immer mit "D;" beginnt, könnte es mit diesem (*.vbs)-Skript funktionieren:
Const FileIn = "E:\Test\Ein.txt"
Const FileOut = "E:\Test\Aus.txt"
Dim Fso, File, Text, Textzeile, Counter
Set Fso = CreateObject("Scripting.FileSystemObject")
Set File = Fso.OpenTextFile(FileIn)
Text = Split(File.ReadAll, vbCrLf): File.Close
Set File = Fso.CreateTextFile(FileOut)
'Text in "" Entsprechend anpassen, damit die Anzahl der Speperatoren stimmen
File.WriteLine "K;Warenentnahme;10007;"
Counter = 1
For Each Textzeile In Text
If Textzeile <> "" Then
File.WriteLine Replace(Textzeile, "D;", "D;" & Counter & ";")
Counter = Counter + 1
End If
Next
File.Close
Gruß Dieter
Hallo Underdog81!
Jepp, gern geschehen
Wünsche Dir auch ein schönes sonniges Wochenende
Gruß Dieter
Jepp, gern geschehen
Wünsche Dir auch ein schönes sonniges Wochenende
Gruß Dieter
Hallo Underdog81!
Nur der Vollständigkeit halber (und um die Frage
Wie bei Dieters Ansatz gilt auch hier: Zeile 6 ggf anpassen ...
Und für alle, die's gerne kürzer mögen:
Grüße
bastla
Nur der Vollständigkeit halber (und um die Frage
Ist es überhaupt möglich mit einer Batch?
zu beantworten ):@echo off & setlocal
set "Ein=D:\Ein.txt"
set "Aus=D:\Aus.txt"
set "Delim=;"
>"%Aus%" echo K;Warenentnahme;10007;
for /f "tokens=1,2* delims=:%Delim%" %%a in ('findstr /n "^" "%Ein%"') do >>"%Aus%" echo %%b%Delim%%%a%Delim%%%c
Und für alle, die's gerne kürzer mögen:
@>"D:\Aus.txt" (@echo K;Warenentnahme;10007;&@for /f "tokens=1,2* delims=:;" %%a in ('findstr /n "^" "D:\Ein.txt"') do @echo %%b;%%a;%%c)
bastla
Hallo Underdog81!
Annahme hier wie oben: Es gibt zwischen den einzelnen Zeilen der Datei keine Leerzeilen ...
Grüße
bastla
ich arbeite nämlich mmit einer batch die Programme nacheinander ab
Das spräche noch nicht gegen die Verwendung des VBScripts - auf Wunsch ließe sich das auch vom Batch selbst erzeugen;etwas kompakter zB:@echo off & setlocal
set "Ein=D:\Ein.txt"
set "Aus=D:\Aus.txt"
set C=%temp%\ConvertSannerCSV.vbs
>%C% echo Set fso=CreateObject("Scripting.FileSystemObject"):Text=Split(fso.OpenTextFile("%Ein%").ReadAll,vbCrLf)
>>%C% echo Set File=fso.CreateTextFile("%Aus%"):File.WriteLine "K;Warenentnahme;10007;"
>>%C% echo For i=0 To UBound(Text):Z=Text(i):If Z^<^>"" Then:File.WriteLine "D;"^&i+1^&Mid(Z,2):End If:Next
cscript //nologo %C%
Grüße
bastla
Hallo bastla!
War mir schon klar, dass es mit Batch wesentlich kürzer geht. Zumindest, wenn Du sie schreibst
Gruß Dieter
War mir schon klar, dass es mit Batch wesentlich kürzer geht. Zumindest, wenn Du sie schreibst
Annahme hier wie oben: Es gibt zwischen den einzelnen Zeilen der Datei keine Leerzeilen ...
Wenn die letzte Zeile einen Zeilenumbruch enthält, dann hat die letzte UBound-Zeile ein "" drinnenGruß Dieter
Hallo Dieter!
Grüße
bastla
Wenn die letzte Zeile einen Zeilenumbruch enthält, dann hat die letzte UBound-Zeile ein "" drinnen
Deswegen auch "zwischen den Zeilen" ... War mir schon klar, dass es mit Batch wesentlich kürzer geht. Zumindest, wenn Du sie schreibst
Der Einzeiler ist ja nur Spaß - aber ein Batch wird so gut wie immer kürzer sein als ein VBScript (Ausnahme wären etwa Zeitberechnungen) - aber oft dafür länger laufen ...Grüße
bastla