mc-doubleyou
Goto Top

Zwei oder mehr Leerzeichen ersetzen mit einem Bindestrich

Da ich nicht sicher bin ob es ein VB-Script, Batch oder sonst was wird stell ichs mal hier rein.

Hallo,

brauche bitte Hilfe, ich habe ein PDF in ein TXT konvertiert damit ich aus diesem TXT dann ein XLS machen kann muss ich alles was mehr als ein Leerzeichen ist irgendwie in ein anderes Trennungszeichen zB.: Bindestrich konvertieren.

Kann mir da bitte wer helfen. Mit Notepad++ hab ich zumindest geschafft das 2 Leerzeichen = 1 Bindestrich aber hilfreich ist das auch nicht wirklich.

Danke!

lg mcdy

Content-Key: 165630

Url: https://administrator.de/contentid/165630

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: RedFireFighter
RedFireFighter 04.05.2011 um 12:39:58 Uhr
Goto Top
Also was mir auf der Schnelle einfallen würde und war sehr einfach ist:

Editor öffnen; Die längste Reihenfolge an Leerzeichen ermitteln; Zeichen ersetzen; Die längste Reihenfolge an Leerzeichen eingeben und durch ein anderes Zeichen ersetzen; Danach das mit einem Leerzeichen weniger durchführen. Das machst du so lange bist du nur mir 1 Leerzeichen hast.

Wie gesagt ist jetzt sehr einfach!

mfg
Mitglied: Lochkartenstanzer
Lochkartenstanzer 04.05.2011 um 12:41:58 Uhr
Goto Top
Zitat von @mc-doubleyou:
Hallo,

brauche bitte Hilfe, ich habe ein PDF in ein TXT konvertiert damit ich aus diesem TXT dann ein XLS machen kann muss ich alles was
mehr als ein Leerzeichen ist irgendwie in ein anderes Trennungszeichen zB.: Bindestrich konvertieren.

Kann mir da bitte wer helfen. Mit Notepad++ hab ich zumindest geschafft das 2 Leerzeichen = 1 Bindestrich aber hilfreich ist das
auch nicht wirklich.


Normalerweise macht man sowas mit sed oder ähnlichem, aber in Notepad würde ich es so machen:

Drei Leerzeichen durch zwei Leerzeichen ersetzen, und zwar solange, bis keine Ersetzungen mehr möglich sind.

Und dann zwei Leerzeichen durch einen Bindestrich -et voila - Das gewünschte Ergebnis sollte da sein.
Mitglied: RedFireFighter
RedFireFighter 04.05.2011 um 12:50:52 Uhr
Goto Top
Mir ist das nochwas eigenfallen!

Im Word den Ersetzten Dialog öffnen.
Dann gibts bei da Erwitert>>, dort aktivierst du Platzhalter verwenden.
Jetzt gibts du bei Suchen nach folgendes ein: Leerzeichen{2;}
Bei ersetzten dein gewünschtes Zeichen. Statt Leerzeichen natürlich ein wirkliches Leerzeichen eingeben ;)

Alle ersetzen und fertig!!

Mfg
Mitglied: mc-doubleyou
mc-doubleyou 04.05.2011 um 12:59:27 Uhr
Goto Top
Hallo ihr 2 erstmal danke für die Antwort,

aber da dieser Prozess evtl öfter passieren soll will ich nicht von 50 bis auf 2 Leerzeichen reduzieren müssen.

Bzgl. sed das ist doch ein UNIX Editor oder? Ich habe nämlich hier nur ein Windows.

Theoretisch bräuchte ich ja "nur" ein Programm welches fähig ist " "> bei Suchen und Ersetzen zu interpretieren.

Naja vielleicht findet sich ja noch wer bzw. vl. zeigen Bastla oder Biber noch was in ihnen steckt *schlackere jedesmal mit den Ohren*

lg mcdy
Mitglied: micneu
micneu 04.05.2011 um 14:25:20 Uhr
Goto Top
nutze in notepadd++ suchen die option regulare ausdrücke

< (\s\s)

sollte 2 lehrzeichen entsprechen.

gruß michael
Mitglied: TsukiSan
TsukiSan 04.05.2011 um 14:55:52 Uhr
Goto Top
hallo mc-doubleyou,

eventuell hilft dir ja dieses VBS-Script schon und man muss ja nicht alle Möglichkeiten
" " > durchackern.
probier mal:
Option Explicit

Dim Pfad
Dim SuchText
Dim ReplaceText
dim FSO , MeineDatei
Dim MeineDateiNeu
Dim objDialog , intResult
Dim Zaehler

Pfad = BrowseForFile("C:\", "Textdateien (.txt)|*.txt|All Files|*.*")  

If Pfad = "" Then  
	Wscript.Echo "Keine Datei ausgewählt. Script wird beendet"  
	Wscript.Quit
End If

Function BrowseForFile(pstrPath, pstrFilter)
	Set objDialog = CreateObject("UserAccounts.CommonDialog")  
	objDialog.Filter = pstrFilter
	objDialog.InitialDir = pstrPath
	objDialog.Flags = &H80000 + &H4 + &H8
	intResult = objDialog.ShowOpen
	BrowseForFile = objDialog.FileName
End Function

Set objDialog = Nothing

SuchText = InputBox("Bitte Suchtext eingeben." , "Suchtext...","Suche")  
ReplaceText = InputBox("Bitte ErsetzenText eingeben." , "ErstzenText...","Ersetze")  

Ersetzen

Private Sub Ersetzen()
        
	On Error Resume next
	
	Set FSO = createobject("Scripting.FileSystemObject")  

	Set MeineDatei = FSO.OpenTextFile(Pfad, 1)
		MeineDateiNeu = Replace(MeineDatei.ReadAll,SuchText,ReplaceText)
		Zaehler = Instr(MeineDateiNeu,ReplaceText)
	MeineDatei.Close

	Set MeineDatei = FSO.CreateTextFile(Pfad,True)
		MeineDatei.Write(MeineDateiNeu)
	MeineDatei.Close

	Set FSO = Nothing
	Set MeineDatei = Nothing

End Sub

If Not Zaehler = 0 Then
Wscript.Echo "In der Datei: " & Chr(34) & Pfad & Chr(34) & VbCrlf _  
              & "wurde: " & Chr(34) & Suchtext & Chr(34) & " durch " _  
              & Chr(34) & ReplaceText & Chr(34) & "ersetzt."  
Else
Wscript.Echo "In der Datei: " & Chr(34) & Pfad & Chr(34) & VbCrlf _  
             & "konnte der gesuchte Text nicht gefunden werden."  
End If

das nehme ich zum einfachen ersetzen von irgendwelchen Strings in Text(typischen)dateien

Gruss
Tsuki

[Edit]
wie Biber schon anmerkt:
Wenn du EIN LEERZEICHEN ungerade Anzahl nur behalten willst, dann suche nach mindestens ZWEI LEERZEICHEN gerade Anzahl face-wink
[/Edit]
Mitglied: miniversum
miniversum 04.05.2011 um 14:59:11 Uhr
Goto Top
Ich bin zwar weder Bastla noch Biber aber, ...
In vbs kanns tdu die Datei einlesen. Dann gibts da nen replace befehl, danach wieder in eine Datei schreiben. Wobei du da dann auch mehrere replace nacheinander machen kannst bzw. in schleife um eben auch 50 leerzeichen zu einem zu reduzieren.
In Batch kannst du eine Datei mit einer for schleife zeile für zeile verarbeiten. Am einfachsten ist es indem du dann eine unterprozedur aufrufst, die zeile einer variabeln zuweist, dann die leerzeichen ersetzt und wieder in eine (andere) datei schreibst:
echo %zeile: =_%>>datei.txt
das geht natürlich auch wieder mehrfach hintereinander oder in einer übergeordneten schleife.
Mitglied: Lochkartenstanzer
Lochkartenstanzer 04.05.2011 um 15:07:40 Uhr
Goto Top
Zitat von @mc-doubleyou:

Bzgl. sed das ist doch ein UNIX Editor oder? Ich habe nämlich hier nur ein Windows.


mit cygwin alles kein Problem. Da bekommt man die ganze gnu-toolchain und einiges mehr, wenn man will.

http://www.cygwin.com
Mitglied: Biber
Biber 04.05.2011 um 15:13:37 Uhr
Goto Top
Moin mc-Double-you,

nun macht da nicht so'n Heckmeck drum

Eine Zeile VBScript:
'RemoveDoubleSpaces.vbs  
Wscript.Echo Replace(Replace(Replace(CreateObject("Scripting.FileSystemObject").OpenTextFile(wscript.arguments(0)).ReadAll, "    "," "),"   "," "), "  "," ")  

Demo am CMD-Prompt:
>type TextMitDoppeltenLeerzeichen.txt
Text    mit    Leerstellen      an      irgendwelchen         Positionen Text    mit    Leerstellen      an      irgendwelchen         Positionen
Text        mit             Leerstellen      an      irgendwelchen                     Positionen
Text    mit    Leerstellen      an      irgendwelchen         Positionen Text    mit    Leerstellen      an      irgendwelchen         Positionen
Text        mit             Leerstellen      an      irgendwelchen                     Positionen
Text    mit    Leerstellen      an      irgendwelchen         Positionen Text    mit    Leerstellen      an      irgendwelchen         Positionen
Text        mit             Leerstellen      an      irgendwelchen                     Positionen
Text    mit    Leerstellen      an      irgendwelchen         Positionen Text    mit    Leerstellen      an      irgendwelchen         Positionen
Text        mit             Leerstellen      an      irgendwelchen                     Positionen
Text    mit    Leerstellen      an      irgendwelchen         Positionen Text    mit    Leerstellen      an      irgendwelchen         Positionen
Text        mit             Leerstellen      an      irgendwelchen                     Positionen
Text    mit    Leerstellen      an      irgendwelchen         Positionen Text    mit    Leerstellen      an      irgendwelchen         Positionen
Text        mit             Leerstellen      an      irgendwelchen                     Positionen

(=15:07:33  F:\schnipsel=)
>RemoveDoubleSpaces.vbs TextMitDoppeltenleerZeichen.txt
Text mit Leerstellen an irgendwelchen Positionen Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen Text mit Leerstellen an irgendwelchen Positionen
Text mit Leerstellen an irgendwelchen Positionen

Fertig.
Okay, statt Ausgabe auf den Monitor sollte der Krams umgeleitet werden mit
RemoveDoubleSpaces.vbs TextMitDoppeltenLeerzeichen.txt > TextMitWenigerLeerzeichen.txt

Und falls es für die nachfolgende Verarbeitung in Excel nötig sein sollte, dann halt statt mehrere SPACEs mit einem SPACE ersetzen:
...  Replace("       ","_")...   'Replace MehrereSpaces mit "_"

Und ganz aussen wieder ein
...  Replace("__","_")...   ' Replace mehrere "_" durch eines.

Grüße
Biber
Mitglied: Lochkartenstanzer
Lochkartenstanzer 04.05.2011 um 15:27:25 Uhr
Goto Top
Mit sed sieht das so aus:

sed -e "s/ */-/g" -i TextMitDoppeltenLeerzeichen.txt

oder wenn die Datei nicht verändert werden soll:

sed -e "s/ */-/g" <TextMitDoppeltenLeerzeichen.txt > Text-mit-Bindestrichen.txt


Nachtrag: zwischen "s/" und "*/" sind 3 Leerzeichen!
Mitglied: tahuma
tahuma 24.04.2014 um 23:12:29 Uhr
Goto Top
Hallo mcdy,
in notepad++ Suchen und Ersetzen die Regulären Expressions aktivieren und nach 2 Leerzeichen gefolgt von einem + suchen.
Findet alles, was mehr als ein Leerzeichen ist.
gruss
tahuma