Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Entferne alle semikolons, die am ende einer zeile stehen (wenn vorhanden)

Frage Entwicklung Batch & Shell

Mitglied: jabali07

jabali07 (Level 1) - Jetzt verbinden

26.03.2012 um 19:28 Uhr, 3023 Aufrufe, 10 Kommentare

konnte mein anliegen leider nicht mit den vorhandenen beiträge beheben. drum habe ich mir erlaubt, meine frage zu posten. falls doch schon so etwas behandelt wurde, bin ich für einen link sehr dankbar.

moin,

ich habe mehrere csv-files mit einigen hundert zeilen, die teilweise ein ";" am ende der zeile aufweisen.
leider tritt das völlig unregelmäßig auf: die eine zeile hat ein ";" am ende, die nächste nicht.
ich brauche die csv-files ohne semikolon.

gibt's eventuell eine möglichkeit zu sagen: entferne alle semikolons (wenn vorhanden), die am ende einer zeile stehen ?

das fragt sich... jabali07
Gruß & Danke
Mitglied: MrNetman
26.03.2012 um 19:36 Uhr
Hi Jaba,

in Word geht das ganz leicht.
Öffne die Datei mit Word.
suchen und ersetzen - erweitern
Suche nach "';^p" ersetze durch "^p"

läuft.

Gruß
Netman
P.S: würde in Office passen.
Bitte warten ..
Mitglied: bastla
26.03.2012 um 20:18 Uhr
Hallo jabali07!

Etwa so (falls es jeweils nur ein Semikolon am Ende der Zeile geben kann):
01.
@echo off & setlocal 
02.
set "Ordner=D:\Der Ordner mit den vielen CSV" 
03.
set "Dateien=*.csv" 
04.
 
05.
set T=%temp%\CSVTemp.txt 
06.
pushd "%Ordner%" 
07.
for /f "delims=" %%i in ('dir /b "%Dateien%"') do ( 
08.
  move "%%i" %T% 
09.
10.
    for /f "eol=§" %%a in (%T%) do ( 
11.
      set "Zeile=%%a" 
12.
      setlocal enabledelayedexpansion 
13.
      if "!Zeile:~-1!"==";" (echo(!Zeile:~,-1!) else (echo !Zeile!) 
14.
      endlocal 
15.
16.
  )>"%%i" 
17.
18.
popd
Mit "§" ist übrigens ein Zeichen gemeint, das nicht in den Dateien vorkommt ...
Falls auch mehrere Semikola am Zeilenende stehen könnten:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Der Ordner mit den vielen CSV" 
03.
set "Dateien=*.csv" 
04.
 
05.
set T=%temp%\CSVTemp.txt 
06.
pushd "%Ordner%" 
07.
for /f "delims=" %%i in ('dir /b "%Dateien%"') do ( 
08.
  move "%%i" %T% 
09.
  for /f "eol=§" %%a in (%T%) do set "Zeile=%%a" & call :ProcessLine "%%i" 
10.
11.
popd 
12.
goto :eof 
13.
 
14.
:ProcessLine 
15.
if not defined Zeile goto :Done 
16.
if "%Zeile:~-1%" neq ";" goto :Done 
17.
set "Zeile=%Zeile:~,-1%" 
18.
goto :ProcessLine 
19.
 
20.
:Done 
21.
setlocal enabledelayedexpansion 
22.
>>%1 echo(!Zeile! 
23.
endlocal 
24.
goto :eof
Grüße
bastla

[Edit] echo\ durch echo( ersetzt [/Edit]
Bitte warten ..
Mitglied: 64748
27.03.2012 um 00:14 Uhr
Guten Abend,

also für so eine Aufgabe würde ich kein Programm schreiben. Ich nutze auch auf Windowsrechnern den Editor vim, folgendes Kommando kann man in vim verwenden:
:%s/;$//
wenn man die entsprechende Datei geöffnet hat, im einzelnen bedeutet das Kommando % (gesamte Datei), s (ersetze) ;$ (Semikolon am Zeilenende) // (nix)
Falls, wie bastla vermutet, auch mehrere Semikola am Zeilenende stehen können funktioniert auch
:%s/;\+$//
auf einem Linuxrechner geht's natürlich auch mit sed
sed -i "s/;$//" Dateiname
auch hier der allgemeine Fall mit mehreren Semikola am Ende
sed -i "s/;\+$//" Dateiname
Ich hab im Job auch meistens mit Windows zu tun, aber es gibt Dinge, die kann ich mit Unix-Werkzeugen einfacher erledigen. Nix für ungut.

Markus
Bitte warten ..
Mitglied: bastla
27.03.2012 um 00:24 Uhr
Hallo hmarkus!
also für so eine Aufgabe würde ich kein Programm schreiben.
Ich doch auch nicht - ist ja nur ein Stückchen Script (und kommt mit Bordmitteln aus) ...

Grüße
bastla
Bitte warten ..
Mitglied: jabali07
30.03.2012 um 18:24 Uhr
Hallo zusammen,

vielen, lieben Dank für die investierte Zeit.
Für mich IT-Depp ist das wirklich eine super Hilfe.

Ich habe die Vorschläge einmal durchprobiert. (Sogar die Linux-Nummer)

Leider hat das nicht zu dem gewünschten Ergebnissen geführt. Das liegt bestimmt an meinen stümperhaften Beschreibungen.
Ich versuche das noch einmal konkret zu gestalten:

Ausgang: (csv-file mit Inhalt wie folgt)

"Invite";"Invitar";
"OK, thanks!";"¡de acuerdo, gracias!";
"Invite Your Friends";"Invita a tus amigos";
"Custom Message";"Mensaje personalizado";

Gewünschtes Ergebnis: (csv-file mit Inhalt wie folgt)

"Invite";"Invitar"
"OK, thanks!";"¡de acuerdo, gracias!"
"Invite Your Friends";"Invita a tus amigos"
"Custom Message";"Mensaje personalizado"

Also halt genauso wie der Ausgang, nur ohne finales ";"

Wenn ich das Script von baslta laufen lasse, kommt folgendes heraus:

Zeile:~,-1
"OK,
"Invite
"Custom

Gibt's noch eine Idee, wie das funktionieren könnte?

Ein schönes Wochenende an alle
jabali
Bitte warten ..
Mitglied: 64748
30.03.2012 um 19:11 Uhr
Hallo jabali,

ich nehme an, es ist das Skript von bastla was bei Dir nicht richtig funktioniert. Bist Du denn sicher, dass Du es richtig abgetippt (bzw. kopiert hast?).

Poste hier mal bitte das Skript, welches Du benutzt.

Markus
Bitte warten ..
Mitglied: jabali07
30.03.2012 um 19:37 Uhr
Hallo Markus,

danke für deine Antwort.
Ich benutze das folgende Script:

@echo off & setlocal

set "Ordner=C:\Folder_01"
set "Dateien=test.csv"
set T=%temp%\CSVTemp.txt
pushd "%Ordner%"

for /f "delims=" %%i in ('dir /b "%Dateien%"') do (

move "%%i" %T%

(

for /f "eol=§" %%a in (%T%) do (

set "Zeile=%%a"

setlocal enabledelayedexpansion

if "!Zeile:~-1!"==";" (echo\!Zeile:~,-1!) else (echo !Zeile!)

endlocal

)

)>"%%i"

)

popd


Das funktioniert auch klasse -ohne Fehlermeldung-, nur ist das Ergebnis nicht ganz, wie gewünscht.

Gruß, jabali
Bitte warten ..
Mitglied: mak-xxl
30.03.2012 um 19:57 Uhr
Moin jabali07,

ich bin gerade über den Beitrag gestolpert und habe die Lösung von bastla vor ein paar Tagen für mich adaptiert, deswegen hier ein Vorschlag:

01.
@echo off & setlocal 
02.
set "Ordner=D:\Der Ordner mit den vielen CSV" 
03.
set "Dateien=*.csv" 
04.
 
05.
set T=%temp%\CSVTemp.txt 
06.
pushd "%Ordner%" 
07.
for /f "delims=" %%i in ('dir /b "%Dateien%"') do ( 
08.
  move "%%i" %T% 
09.
10.
    for /f "delims=" %%a in (%T%) do ( 
11.
      set "Zeile=%%a" 
12.
      setlocal enabledelayedexpansion 
13.
      if "!Zeile:~-1!"==";" (echo !Zeile:~,-1!) else (echo !Zeile!) 
14.
      endlocal 
15.
16.
  )>"%%i" 
17.
18.
popd
Beachte bitte Zeilen 10 und 13.

Viel Erfolg, ein schönes Wochenende und freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: jabali07
30.03.2012 um 20:32 Uhr
Hallo Mario,

funktioniert 1a! Besten Dank für die Korrektur. Bin glücklich!
Dank auch noch einmal an alle anderen, insbesondere an basla, der mir nicht zum ersten mal ein Superscript zur Verfügung gestellt hat.

Gruß + Gracias
jabali
Bitte warten ..
Mitglied: bastla
30.03.2012 um 22:45 Uhr
Hallo Mario!

"delims=" hätte ich auch schon verwenden sollen ...

Das Weglassen von "eol=§" führt allerdings dazu, dass "for /f" Zeilen, die mit einem Semikolon beginnen, ignoriert (da sie dann defaultmäßig als Kommentar interpretiert werden) ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
gelöst Excel 2013: Formeln entfernen und Ergebnisse stehen lassen (2)

Frage von alhambra zum Thema Microsoft Office ...

Windows Tools
gelöst Nicht mehr vorhandene Computer aus der AD entfernen (6)

Frage von M.Marz zum Thema Windows Tools ...

Batch & Shell
gelöst In allen Textdateien eines bestimmten Pfades die Zeilen x bis Ende löschen (2)

Frage von Schloth zum Thema Batch & Shell ...

Ubuntu
gelöst Wie kann man es tun? Alle Zeilen mit 2 und mehr Leerzeichen entfernen (1)

Frage von takitano zum Thema Ubuntu ...

Neue Wissensbeiträge
Multimedia

Raspberry Pi als Digital-Signage-Computer

(1)

Information von BassFishFox zum Thema Multimedia ...

Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(15)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (21)

Frage von jensgebken zum Thema Windows Server ...

Router & Routing
Freigabe aus anderem Netz nicht erreichbar (21)

Frage von McLion zum Thema Router & Routing ...

Batch & Shell
Batch Programm verhalten bei shoutdown -p (19)

Frage von Michael-ITler zum Thema Batch & Shell ...

Festplatten, SSD, Raid
gelöst Raidcontroller funktioniert nur, wenn unter Legacy-Boot gestartet wird (14)

Frage von DerWoWusste zum Thema Festplatten, SSD, Raid ...