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

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, 2993 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: hmarkus
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: hmarkus
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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...