Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

erste 6 Zeilen und letzte löschen

Frage Entwicklung Batch & Shell

Mitglied: ManneKL

ManneKL (Level 1) - Jetzt verbinden

12.02.2007, aktualisiert 17.02.2007, 7095 Aufrufe, 13 Kommentare

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
Mitglied: miniversum
12.02.2007 um 11:55 Uhr
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set infile=1.txt 
04.
set tempfile=2.txt 
05.
set outfile=3.txt 
06.
set frontcut=6 
07.
set backcut=1 
08.
 
09.
set zeile=0 
10.
FOR /F "tokens=1 delims=" %%A in (%infile%) do ( 
11.
set /a zeile=!zeile!+1 
12.
if !zeile! gtr %frontcut% echo %%A>>%tempfile% 
13.
14.
 
15.
set /a zeile=!zeile!-%frontcut% 
16.
 
17.
FOR /F "tokens=1 delims=" %%A in (%tempfile%) do ( 
18.
if !zeile! gtr %backcut% echo %%A>>%outfile% 
19.
set /a zeile=!zeile!-1 
20.
)
miniversum

[Edit]: Nach dem Test Code angepasst
Bitte warten ..
Mitglied: ManneKL
12.02.2007 um 18:29 Uhr
Hallo miniversum,
habe den Batch zusammen mit der.cvs-Datei in einen Ordner gelegt und ausgeführt, aber leider ohne Erfolg. das Dos-Fenster geht kurz auf und zu ohne etws gemacht zu haben.
Habe schon verschiedene sachen ausprobiert, aber komme nicht weiter.
Vielleicht kann mir noch jemand behilflich sein?
Gruß
manne
Bitte warten ..
Mitglied: miniversum
12.02.2007 um 19:51 Uhr
Also getestet habe ich es mit folgender datei:
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
 
und es funktioniert so bei mir.

Kannst Du mal deine csv Datei posten? (Halt nur die ersten und letzten paar Zeilen)

miniversum
Bitte warten ..
Mitglied: Biber
12.02.2007 um 20:38 Uhr
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:
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

3) danach musst Du nochmal, genauso zeilenweise durch (wie in miniversums Beispiel) und alle Zeilen außer der letzten raushauen...

01.
... 
02.
REM %lines% ...möge ermittelt sein... 
03.
Set /a linesNow=0 
04.
for /f "delims=" %%i in (%temp%\WithOutFirst6lines.csv) do call EchoIt "%%i"  
05.
goto :eof 
06.
 
07.
:EchoIt --- Parameter %1 ist eine ganze Zeile "in Anführungszeichen" 
08.
Set /a linesNow+=1 
09.
If [%linesNow%] LSS [%Lines%] Echo "%~1" >>output.csv
Gruss
Biber
Bitte warten ..
Mitglied: ManneKL
13.02.2007 um 18:38 Uhr
Hallo miniversum,

hier schicke ich Dir mal einen Ausschnitt der .cvs-Datei:

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
03.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR
.
.
.

Kontostand (29.06.2006): 498,18 EUR

Meine Versuche sind sehr leienhaft, aber vielleicht kannst Du mir nochmal helfen.
Also, es sollen die ersten 6-Zeilen raus und immer die letzte Zeile und dann soll die cvs-Datei umbenannt werden in KontoumsätzeTagesdatum.cvs.

Würde mich freuen , wenn es klappt.
Gruß
Manne
Bitte warten ..
Mitglied: miniversum
13.02.2007 um 20:02 Uhr
ich hab deine Datei so genommen:
01.
Umsätze - persönliches Konto (00) Kundennummer: 999/36669999 
02.
01.01.2006 - 30.06.2006 
03.
Letzter Kontostand 295,06 EUR 
04.
Gebuchte Umsätze (Vorgemerkte und noch nicht gebuchte Umsätze sind nicht Bestandteil dieser Aufstellung) 
05.
Es werden nur die Umsätze der letzten 120 Tage angezeigt. 
06.
Buchungstag Wert Verwendungszweck Soll Haben Waehrung 
07.
01.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR 
08.
02.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR 
09.
03.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR 
10.
04.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR 
11.
05.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR 
12.
06.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR 
13.
07.03.2006 01.03.2006 Dauerauftrag an Ruecklagen auf DiBa 100 EUR 
14.
08.03.2006 03.03.2006 EC-AUTOMAT 03.03 KARTE 9 -300 EUR 
15.
Kontostand (29.06.2006): 498,18 EUR
und habs mit meiner Variante und mit Bibers Variante (leicht abgeändert) probiert:
01.
@echo off & setlocal enabledelayedexpansion 
02.
 
03.
set infile=b.txt 
04.
set tempfile=bt.txt 
05.
set outfile=out.txt 
06.
set frontcut=6 
07.
set backcut=1 
08.
 
09.
More +%frontcut% %infile%>%tempfile% 
10.
 
11.
 
12.
for /f %%i in (%tempfile%) do set /a lines+=1 
13.
 
14.
Set /a linesNow=0 
15.
for /f "delims=" %%i in (%tempfile%) do call:EchoIt "%%i"  
16.
goto :eof 
17.
 
18.
:EchoIt --- Parameter %1 ist eine ganze Zeile "in Anführungszeichen" 
19.
Set /a linesNow+=1 
20.
If [%linesNow%] LSS [%Lines%] Echo %~1 >>%outfile%
und beides hat funktioniert.
Sieht die csv Datei den so aus im Nodepad oder hast du die aus Excel rauskopiert?

miniversum
Bitte warten ..
Mitglied: Biber
13.02.2007 um 21:28 Uhr
[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
Bitte warten ..
Mitglied: ManneKL
14.02.2007 um 08:09 Uhr
Hallo miniversum + biber,

habe den Dateiausschnitt aus der Kontoumsatz.csv in Nodepad kopiert und

editiert(Zeilen + Zeichen gelöscht).In der Verarbeitung soll dann aber nur mit der

*.csv-Datei realisiert werden.
Der Pfad, wo die Datei + der Batch liegen ist:
C:\Kontoumsätze

Ich weis nicht woran daß liegen kann , daß es bei mir nicht funktioniert

(Leerzeichen in der Datei, kann ich nicht erkennen und...)

Danke im voraus für Eure Hilfe, aber wenn meine Experimente erfolglos beiben, dann

gebe ich auf.

Manne
Bitte warten ..
Mitglied: miniversum
14.02.2007 um 19:42 Uhr
Versuchs mal zur probe nicht mit C:\Kontoumsätze sondern mit C:\Kontoumseatze.
Vermeide Leerzeichen, Umlaute und Sonderzeichen in den Datei- und Verzeichnisnamen.
Versuchs mal mit Namen wie a.csv oder 1.csv

miniversum
Bitte warten ..
Mitglied: ManneKL
17.02.2007 um 09:27 Uhr
Hallo miniversum+Biber,
habe euren Vorschlag erfolgreich umsetzen können,hat mich einige Mühe gekostet aber dank Euerer unbezahlbaren Hilfe habe ich meine Dateibezeichnungen angeglichen und es funktioniert.Bis auch das löschen der letzten Zeile:Kontostand (29.06.2006): 498,18 EUR, die bleibt in der neuen Datei stehen.wie bekomme ich diese aber noch raus?
Bitte Euch nochmals um Hilfe.
Viele Grüße
Manne
Bitte warten ..
Mitglied: miniversum
17.02.2007 um 12:16 Uhr
Wie sieht deine Batch datei den nun aus. Kansnt Du die mal Posten?

gib mal:
nach Bibers Version nach dem
for /f %%i in (%tempfile%) do set /a lines+=1
das lines mit
echo %lines%
und nach meiner Version nach dem
set /a zeile=!zeile!-%frontcut%
das zeile mit
echo %zeile%
aus.

Dies sollte der Anzahl der Zeilen der Datei - 6 entsprechen.

miniversum
Bitte warten ..
Mitglied: ManneKL
17.02.2007 um 16:26 Uhr
Hallo miniversum,
hier ist der Batch, wo die letzte Zeile nicht gelöscht wird:

@echo off & setlocal enabledelayedexpansion

set infile=Kontoumsaetze2.csv
set tempfile=Kontoumsaetze_temp.csv
set outfile=Kontoumsaetze_out2.csv
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%



Vielleicht findest Du den Fehler wo die letzte gelöscht wird.
gruß
Manne
Bitte warten ..
Mitglied: ManneKL
17.02.2007 um 17:03 Uhr
Hallo miniversum,
habe die echo %lines% ergänzt und es funktioniert Deine Variante!
Vielen,vielen ...Dank für Eure Hilfe.

Gruß
Manne
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Userverwaltung
Erste Anmeldung und letzte Abmeldung pro Tag auflisten (4)

Frage von Codehunter zum Thema Windows Userverwaltung ...

Batch & Shell
Powershell - Zeilen in einer csv löschen bis (7)

Frage von Franz-Josef-II zum Thema Batch & Shell ...

Perl
gelöst Mit Perl aus einer Datei teilidentische Zeilen löschen (5)

Frage von Jeduja zum Thema Perl ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...