erste 6 Zeilen und letzte löschen
erste 6 Zeilen und letzte löschen
Hallo ,
brauche mal dringend Eure Hilfe, sonst komme ich nicht weiter.
Ich habe eine Kontoumsaetze_123456_9874561.cvs-Datei (Excel) und will in dieser
immer die ersten 6 Zeilen gelöscht haben und immer die letzte Zeile auch.Dazwischen
sind aber gefüllte Zeile (ca. 1-300), die drin bleiben sollen, zum einlesen in eine
Access-Datenbank.
Am Ende soll dann noch die Datei umbenannt werden in "Kontoumsaetze".
Kann mir da mal jemand helfen, denn mit einfachen kopieren und umbennenn komme ich
nicht zum Ziel.Dieses will ich mit einen Batch , als *.bat durchführen.
Für Eure hilfreiche Unterstützung, wär ich sehr dankbar.
Manne
Hallo ,
brauche mal dringend Eure Hilfe, sonst komme ich nicht weiter.
Ich habe eine Kontoumsaetze_123456_9874561.cvs-Datei (Excel) und will in dieser
immer die ersten 6 Zeilen gelöscht haben und immer die letzte Zeile auch.Dazwischen
sind aber gefüllte Zeile (ca. 1-300), die drin bleiben sollen, zum einlesen in eine
Access-Datenbank.
Am Ende soll dann noch die Datei umbenannt werden in "Kontoumsaetze".
Kann mir da mal jemand helfen, denn mit einfachen kopieren und umbennenn komme ich
nicht zum Ziel.Dieses will ich mit einen Batch , als *.bat durchführen.
Für Eure hilfreiche Unterstützung, wär ich sehr dankbar.
Manne
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51400
Url: https://administrator.de/forum/erste-6-zeilen-und-letzte-loeschen-51400.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
13 Kommentare
Neuester Kommentar
@echo off & setlocal enabledelayedexpansion
set infile=1.txt
set tempfile=2.txt
set outfile=3.txt
set frontcut=6
set backcut=1
set zeile=0
FOR /F "tokens=1 delims=" %%A in (%infile%) do (
set /a zeile=!zeile!+1
if !zeile! gtr %frontcut% echo %%A>>%tempfile%
)
set /a zeile=!zeile!-%frontcut%
FOR /F "tokens=1 delims=" %%A in (%tempfile%) do (
if !zeile! gtr %backcut% echo %%A>>%outfile%
set /a zeile=!zeile!-1
)
miniversum
[Edit]: Nach dem Test Code angepasst
Hmm, ManneKL und miniversum,
unabhängig von der Fehlersuche (deren Ausgang mich auch interessiert), würde ich eine dreiteilige Strategie vorschlagen:
1.) die .csv-Datei reduziert um die ersten 6 Zeilen in eine Temp-Datei kloppen wie auch in miniversums Skizze.
Dafür würde ich allerdings den sehr viel schnelleren More-Befehl nehmen:
2) was Dir im Batch nicht erspart bleibt, wenn Du die Zeilenanzahl brauchst:
- einmal alle Zeilen durchwackeln und hochzählen:
3) danach musst Du nochmal, genauso zeilenweise durch (wie in miniversums Beispiel) und alle Zeilen außer der letzten raushauen...
Gruss
Biber
unabhängig von der Fehlersuche (deren Ausgang mich auch interessiert), würde ich eine dreiteilige Strategie vorschlagen:
1.) die .csv-Datei reduziert um die ersten 6 Zeilen in eine Temp-Datei kloppen wie auch in miniversums Skizze.
Dafür würde ich allerdings den sehr viel schnelleren More-Befehl nehmen:
More /+6 Kontoumsaetze_123456.csv %temp%\WithOutFirst6lines.csv
2) was Dir im Batch nicht erspart bleibt, wenn Du die Zeilenanzahl brauchst:
- einmal alle Zeilen durchwackeln und hochzählen:
for /f %%i in (WithOutFirst6lines.csv) do set /a lines+=1
REM in lines steht jetz die Gesamt-Zeilenzahl
REM in lines steht jetz die Gesamt-Zeilenzahl
3) danach musst Du nochmal, genauso zeilenweise durch (wie in miniversums Beispiel) und alle Zeilen außer der letzten raushauen...
...
REM %lines% ...möge ermittelt sein...
Set /a linesNow=0
for /f "delims=" %%i in (%temp%\WithOutFirst6lines.csv) do call EchoIt "%%i"
goto :eof
:EchoIt --- Parameter %1 ist eine ganze Zeile "in Anführungszeichen"
Set /a linesNow+=1
If [%linesNow%] LSS [%Lines%] Echo "%~1" >>output.csv
Gruss
Biber
ich hab deine Datei so genommen:
und habs mit meiner Variante und mit Bibers Variante (leicht abgeändert) probiert:
und beides hat funktioniert.
Sieht die csv Datei den so aus im Nodepad oder hast du die aus Excel rauskopiert?
miniversum
Umsätze - persönliches Konto (00) Kundennummer: 999/36669999
01.01.2006 - 30.06.2006
Letzter Kontostand 295,06 EUR
Gebuchte Umsätze (Vorgemerkte und noch nicht gebuchte Umsätze sind nicht Bestandteil dieser Aufstellung)
Es werden nur die Umsätze der letzten 120 Tage angezeigt.
Buchungstag Wert Verwendungszweck Soll Haben Waehrung
01.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR
02.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR
03.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR
04.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR
05.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR
06.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR
07.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR
08.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR
Kontostand (29.06.2006): 498,18 EUR
und habs mit meiner Variante und mit Bibers Variante (leicht abgeändert) probiert:
@echo off & setlocal enabledelayedexpansion
set infile=b.txt
set tempfile=bt.txt
set outfile=out.txt
set frontcut=6
set backcut=1
More +%frontcut% %infile%>%tempfile%
for /f %%i in (%tempfile%) do set /a lines+=1
Set /a linesNow=0
for /f "delims=" %%i in (%tempfile%) do call:EchoIt "%%i"
goto :eof
:EchoIt --- Parameter %1 ist eine ganze Zeile "in Anführungszeichen"
Set /a linesNow+=1
If [%linesNow%] LSS [%Lines%] Echo %~1 >>%outfile%
Sieht die csv Datei den so aus im Nodepad oder hast du die aus Excel rauskopiert?
miniversum
[nicht weiter wichtige Fussnote]
"enableDelayedExpansion" und das nie verwendete %backcut% könnte man/frau sich für schlechtere Zeiten zurücklegen...
Aber sonst sehe ich es ähnlich... es sollte eigentlich funktionieren.
Wollen wir es nochmal mit den konkreten Pfad/Dateinamen durchspielen, Manne_KL?
Gruss
Biber
"enableDelayedExpansion" und das nie verwendete %backcut% könnte man/frau sich für schlechtere Zeiten zurücklegen...
Aber sonst sehe ich es ähnlich... es sollte eigentlich funktionieren.
Wollen wir es nochmal mit den konkreten Pfad/Dateinamen durchspielen, Manne_KL?
Gruss
Biber
Wie sieht deine Batch datei den nun aus. Kansnt Du die mal Posten?
gib mal:
nach Bibers Version nach dem
Dies sollte der Anzahl der Zeilen der Datei - 6 entsprechen.
miniversum
gib mal:
nach Bibers Version nach dem
for /f %%i in (%tempfile%) do set /a lines+=1
das lines mitecho %lines%
und nach meiner Version nach demset /a zeile=!zeile!-%frontcut%
das zeile mitecho %zeile%
aus.Dies sollte der Anzahl der Zeilen der Datei - 6 entsprechen.
miniversum