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

leerzeichen und leerzeilen aufspüren in txt Format

Frage Entwicklung Batch & Shell

Mitglied: WindowsUser1984

WindowsUser1984 (Level 1) - Jetzt verbinden

21.09.2006, aktualisiert 25.10.2006, 7521 Aufrufe, 14 Kommentare

OS: Win 2000 oder/und ME
Dateien sind im normalen txt Format

Hallo erstmal

habe folgendes problem:
(angenommen _= )dann sehen die Zeilen in etwas so aus:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
(bekomms leider nicht anschaulicher hin, is nich möglich mehrere Leerzeichen aneinander zu machen)

Meistens sind die Leerzeichen in der letzten Zeile.
Für meine Anwendungen ist diese Zeile nicht verarbeitbar,
weiter ist eine leere Zeile für diese Anwendung das ende der Datei.
Zusatzinfo einige Zeilen beginnen aber mir einem leerzeichen und darauf folgt dann Text.


die Ursache habe ich auch recht schnell gefunden.
Benutze eine far.exe (FindAndRepace) um Zeichenketten in einer Datei (die leider nicht immer an der gleichen stelle stehen) zu ersetzen, diese exe macht am ende jeder Datei leider so ca 120 bis 375 leerzeichen.
(für bessere möglichkeiten als far.exe habe ich immer ein Ohr offen

Weiter habe ich durch Benutzerunachtsamkeiten auch ab und zu Zeilen in denen nichts steht(LEERZEILEN), mitten in der Datei - wie oben beschreiben endet für meine Anwendung hier die Datei und der rest wird nicht bearbeitet.


nun suche ich eine möglichkeit diese LEERZEICHEN und LEERZEILEN entweder
über eine chk.bat mit einer fehlermeldung like:"achtung Datei enthält Leerzeile(Zeile 147)"
oder einer korregierdatei mit der ich dann per Darg&Drop Dateien bereinigen kann


Nebenbei habe ich ein kleines prob mit einer BAT die mit xcopy Ordner kopieren sollte,
nach den ausführen kommt die frage ob das Ziel ein Ordner oder eine Datei ist
leider weis ich auswendig nicht welche /X befehle ich nach xcopy gesetzt habe.
werde morgen nochmal gucken falls es keinen Vorschlag gibt

Hoffe das jemand nen Lösungsvorschlag parat hat
Mit freundlichen Grüßen
Mitglied: bastla
21.09.2006 um 08:03 Uhr
Hallo Michael!

Für XCOPY meinst Du vermutlich den Schalter /I

Bezüglich der Korrekturdatei müsste klar gestellt werden, in welchen genau definierten Fällen welche genau definierten Korrekturen erfolgen sollen.

Zum Überprüfen folgender Entwurf:

01.
If WScript.Arguments.Count = 0 Then  
02.
	WScript.Echo "Bitte zumindest die zu prüfende Datei als Parameter übergeben!" 
03.
	WScript.Quit(2) 
04.
End If 
05.
sDatei = WScript.Arguments(0) 
06.
If WScript.Arguments.Count >1 Then 
07.
	sLog = WScript.Arguments(1) 
08.
Else 
09.
	sLog = "C:\LogBlanks.txt" 'bitte Pfad anpassen 
10.
End If 
11.
 
12.
sLogText = "" 
13.
lLineNumber = 0 
14.
lErrors = 0 
15.
lLastBlankLine = 0 
16.
 
17.
Set fso = CreateObject("Scripting.FileSystemObject") 
18.
If Not fso.FileExists(sDatei) Then 
19.
	WScript.Echo "Datei " & sDatei & " nicht gefunden!" 
20.
	WScript.Quit(2) 
21.
End If 
22.
 
23.
Set oFile = fso.OpenTextFile(sDatei, 1) 
24.
Do While Not oFile.AtEndOfStream 
25.
	sLine = oFile.ReadLine 
26.
	lLineNumber = lLineNumber + 1 
27.
	If Trim(sLine) = "" Then 'Leerzeile 
28.
		sLogText = sLogText & "Zeile " & CStr(lLineNumber) & ": Leerzeile" & vbCrLF 
29.
		lErrors = lErrors + 1 
30.
		lLastBlankLine = lLineNumber 
31.
		'Nummer der Letzten Leerzeile speichern, um zu sehen, ob der einzige 
32.
		'gefundene "Fehler" die abschließende Leerzeile ist. 
33.
	End If 
34.
	If Right(sLine, 2) = Space(2) Then 'mindestens 2 aufeinanderfolgende Leerzeichen am Ende 
35.
		sLogText = sLogText & "Zeile " & CStr(lLineNumber) & ": Leerzeichen" & vbCrLF 
36.
		lErrors = lErrors + 1 
37.
	End If 
38.
Loop 
39.
oFile.Close 
40.
 
41.
'Wurde nur die letzte Leerzeile als "Fehler" erkannt --> keinen Fehler anzeigen 
42.
If lErrors = 1 Then 
43.
	If lLastBlankLine = lLineNumber Then 
44.
		WScript.Echo "Keine Fehler gefunden!" 
45.
		WScript.Quit(0) 
46.
	End If 
47.
End If 
48.
 
49.
If lErrors > 0 Then 
50.
	WScript.Echo "Es wurden " & CStr(lErrors) & " Fehler gefunden (siehe Log)!" 
51.
 
52.
	Set oLogFile = fso.OpenTextFile(sLog, 2, True) 
53.
	'8 anstelle von 2 erstellt keine neue Datei, sondern hängt an vorhandene an 
54.
	oLogFile.WriteLine "Geprüfte Datei: " & sDatei 
55.
	oLogFile.Write sLogText 
56.
	oLogFile.Close 
57.
 
58.
	'Logdatei anzeigen 
59.
	Set oShell = WScript.CreateObject ("WScript.Shell") 
60.
	oShell.Run "notepad.exe " & sLog 
61.
 
62.
	WScript.Quit(1) 
63.
End If 
64.
 
65.
WScript.Echo "Keine Fehler gefunden, aber letzte Zeile nicht leer!"
Wenn der obige Code zB als C:\Meine Scripts\BlankCheck.vbs gespeichert wird, kann er wie folgt aufgerufen werden:

01.
CScript //nologo "C:\Meine Scripts\BlankCheck.vbs" C:\Testdatei.txt
--> "C:\Testdatei.txt" überprüfen und (bei Fehlern) Log in "C:\LogBlanks.txt" schreiben

01.
CScript //nologo "C:\Meine Scripts\BlankCheck.vbs" C:\Testdatei.txt C:\AnderesLog.txt
--> "C:\Testdatei.txt" überprüfen und (bei Fehlern) Log in "C:\AnderesLog.txt" schreiben

Da auch ein Fehlercode zurückgegeben wird (2 = keine Testdatei übergeben bzw nicht gefunden, 1 = Fehler entdeckt, 0 = OK) kann (bei Batch-Einsatz) auf die WScript.Echo-Zeilen verzichtet werden.

Soll keine spezielle Log-Datei verwendet werden, kann die Überprüfung auch interaktiv per Drag & Drop der Testdatei auf die VBS-Datei erfolgen.

<Edit> Überprüfung auf Existenz der übergebenen Testdatei hinzugefügt. </Edit>

HTH
bastla
Bitte warten ..
Mitglied: WindowsUser1984
22.09.2006 um 00:21 Uhr
supa,
dachte bis heute mittag das da nix zu machen ist und nun seh ich diese schönen Zeilen
habs gleich an ner test dat.ei ausprobiert
super !!
erstmal vielen vielen dank

Nur noch eine kleine modifikation.
Warscheinlich war meine Problembeschreibung einfach mal wieder zu uneindeutig!?
Es dürfen schon Leerzeichen darin vorkommen auch mehr als 2 hintereinander nur nicht hinter dem Text, also am ende der Zeile max 1 Leerzeichen.

Kann leider kein Beispiel einfügen bekomm das nich hin.
Mir wird immer meine Leerzeichenkette zu einem einzigen zusammengefasst *grml*
selbst mit ´´ ......

also das wenn noch machbar ist wäre SUPER, habs schon ne ganze zeit mit bat's versucht und nich hinbekommen (for überspringt leerzeilen einfach)
bin aber auch noch relatv unerfahren und mit vbs hab ich noch nie gearbeitet wobei es nich schwer aussieht ... mal schauen

Mit freundlichen Grüßen Mike
Bitte warten ..
Mitglied: bastla
22.09.2006 um 07:52 Uhr
Hallo Mike!

Ich habe das Script oben entsprechend modifiziert (Überprüfung auf mindestens 2 Leerzeichen am Ende der Zeile).

Für Weiteres habe ich frühestens gegen 17:00 Uhr Zeit.


HTH
bastla
Bitte warten ..
Mitglied: WindowsUser1984
22.09.2006 um 11:38 Uhr
Hallo
bin super zufrieden =D

sogar mit features:
-aufrufbefehl aus einer batch
-logdatei
-errorlevel zur weiterverarbeitung
-möglichkeit zu wählen zwischen kontinuierlichen loggen und last File log

einfach GROSSE klasse
``*beifallklatsch*

thx 4 ur time
have a nice day
Bitte warten ..
Mitglied: bastla
22.09.2006 um 17:57 Uhr
Hallo Mike!

Danke für die Blumen ...

Freut mich, wenn's passt.

Schönes Wochenende
bastla
Bitte warten ..
Mitglied: WindowsUser1984
24.10.2006 um 16:18 Uhr
Hi nochmal
habe mich nun daran gemacht eine datei zu basteln die alle leerzeilen und leerzeichen nach TEXT entfernt

das mit den leerzeilen ging noch ganz schnell da die forschleife leerzeilen einfach überspringt
nun wollte ich mit dieser schleife gleichzeitig die leerzeichen entfernen

mit For wird Zeile aus der zu prüfenden Datei ausgelesen(weis ich auswendig jetzt nimmer) > weiter mit SET NOWLINE=%%i
und call :CHKLINE

goto :eof
:CHKLINE
SET ENDLINECHK=%NOWLINE:~1%
if "%ENDLINECHK%"==" " SER NOWLINE=%NOWLINE:~0,-1%
if not "%ENDLINECHK%"==" " goto :LINEFIXED
goto CHKLINE
:LINEFIXED
echo %NOWLINE%>>%FILE2%
goto :eof

so in etwa, bin mir nichtmehr sicher
das funktioniert auch teilweise aber ab und zu wenn eine Zahl (zB 4) am ende steht
erscheint die zeile im Fenster aber nicht in der Datei
wenn echo an ist sehe ich die Zeile auch aber entdecke keinen Fehler
zB:

echo asdf asdf asdf asdf 4>>C:\AAA\BBB\CCC\DATEI.FIX

was mach ich falsch?
was kann ich ändern?

Mit freundlichen Grüßen Mike
Bitte warten ..
Mitglied: Biber
24.10.2006 um 16:32 Uhr
Moin WindowsUser1984,
was mach ich falsch?
Du denkst nicht daran, wie blöd es manchmal laufen kann...

was kann ich ändern?
Ändere die Zeile:
ALT: Echo %NOWLINE%>>%FILE2%
in NEU: (Echo %NOWLINE%)>>%FILE2%

Die Ziffern 0-4 haben untern dem CMD eine doppelte Bedeutung - die bezeichnen gleichzeitig die Ein/Ausgabekanäle wie
0 =STDIN=CON: Konsole (im Sinne von Tastatur),
1= STDOUT= CON:=Konsole (im Sinne von Bildschirm),
2= STDERR=Fehlerausgabe=CON=Konsole
3= STDAUX (und meistens STDDBG)
4= STDPRN = Drucker

Wenn also eine Ziffer Eins (direkt) vor dem Größerzeichen steht, heißt das:
Leite Kanal 1, also Bildschirmmeldungen, um nach ...(z.B. %FILE%).
Sprich: Alles, aber außer der Ziffer "1" selbst, wird in die Datei geleitet.

Wenn eine Ziffer Vier (direkt) vor dem Größerzeichen steht, heißt das:
Leite Kanal 4, also alles, was zum Drucker geschickt wird vom vorangegangenen Befehl, um nach ...(z.B. %FILE%).
Da aber gar nichts zum Drucker geschickt wurde, landet auch nichts in der Datei %FILE%.
Der Rest (vor der "4") dürfte zwar kurz auf dem Bildschirm auftauchen, aber das hilft Dir ja nix.

Gruß
Biber
Bitte warten ..
Mitglied: bastla
24.10.2006 um 16:50 Uhr
Hallo Mike!

Falls ich Dich richtig verstehe, willst Du aus einer Textdatei alle Leerzeilen und alle am Ende einer Zeile befindlichen Leerstellen entfernen und das Ergebnis in eine neue Datei schreiben.

Kommen in der Datei auch Zeilen mit führenden Leerstellen vor und müssen diese erhalten bleiben? Falls sie wegfallen können, müsste folgendes klappen:

CleanBlanks.vbs
01.
If WScript.Arguments.Count <> 2 Then  
02.
    WScript.Echo "Verwendung: CScript CleanBlanks.vbs Quelldatei Zieldatei" 
03.
    WScript.Quit(2) 
04.
End If 
05.
 
06.
sQDatei = WScript.Arguments(0) 
07.
sZDatei = WScript.Arguments(1) 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
If Not fso.FileExists(sQDatei) Then 
11.
    WScript.Echo "Datei " & sQDatei & " nicht gefunden!" 
12.
    WScript.Quit(2) 
13.
End If 
14.
 
15.
Set oQDatei = fso.OpenTextFile(sQDatei, 1) 
16.
Set oZDatei = fso.OpenTextFile(sZDatei, 2, True) 'bereits existierende Zieldatei wird überschrieben 
17.
Do While Not oQDatei.AtEndOfStream 
18.
    sZeile = Trim(oQDatei.ReadLine) 
19.
	If sZeile <> "" Then oZDatei.WriteLine sZeile 
20.
Loop 
21.
oQDatei.Close 
22.
oZDatei.Close
Aufruf mit:
01.
CScript //nologo "C:\Meine Scripts\CleanBlanks.vbs" "C:\Datei mit Leerzeichen.txt" "C:\Datei ohne Leerzeichen.txt"
Grüße
bastla

@Biber
Immerhin Zweiter
Bitte warten ..
Mitglied: WindowsUser1984
24.10.2006 um 22:26 Uhr
nun gut das wusste ich nicht ich probiers dann gleich aus
thx
Bitte warten ..
Mitglied: WindowsUser1984
24.10.2006 um 22:28 Uhr
leider beginnen auch zeilen mit leerzeichen, ja
und diese müssen auch erhalten bleiben ....
trozdem danke für deine mühe
villt kann es ein anderer leser gebrauchen

thx
Bitte warten ..
Mitglied: bastla
25.10.2006 um 08:28 Uhr
Hallo Mike!

Zur Ergänzung:

Um nur die Leerzeichen am Ende zu elimieren, ändert sich im Script oben nur eine Zeile (oder, genauer gesagt, ein Buchstabe in dieser Zeile):

01.
sZeile = RTrim(oQDatei.ReadLine)
HTH
bastla
Bitte warten ..
Mitglied: WindowsUser1984
25.10.2006 um 17:11 Uhr
so nun komm ich halt nochmal angekrochen ....
immernoch die gleiche situation!

nun klappt es auch mit den zahlen am ende
aber in der
Datei ist eine schließende Klammer ) an dieser stelle bricht die for schleife ab und die restliche Datei wird nicht bearbeitet...

Bitte nochmals um Hilfe ....
Bitte warten ..
Mitglied: bastla
25.10.2006 um 17:16 Uhr
Hallo Mike!

Magst nicht doch das VBScript nehmen (jetzt mit auf das Zeilenende eingeschränkter Reinigungskraft - siehe unten)?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
25.10.2006 um 17:48 Uhr
Das ist aber auch ein Drama... *ggg

Und ich sach' noch "Du kannst gar nicht so blöd denken, wie es kommt.."

Ich geb zu - an den Fall hatte ich auch nicht gedacht.
Aber noch bin ich nicht am Ende mit meinen Alternativen.

Dann also diese zuletzt geänderte Zeile wie folgt ändern:
01.
[Von:](echo %NOWLINE%)>>%FILE2% 
02.
[In: ]>>%FILE2% echo %NOWLINE%
...somit jetzt doch wieder ohne Klammern.
Die Ziffern 0....4 werden trotzdem geschrieben, falls sie am Ende der Zeile stehen.

Kleine Demo dazu:
01.
>echo %nowline% 
02.
das ist jetzt nur ein Test :) 
03.
#### Variable mit Klammer am Ende 
04.
>echo %nowline%1 
05.
das ist jetzt nur ein Test :)1 
06.
#### ohne explizites Umleitungs-Größer-Zeichen klappts auch mit Ziffer "1" am Ende 
07.
>echo %nowline%1>con 
08.
das ist jetzt nur ein Test :) 
09.
#### die "1" am Ende geht verloren bei der Umleitung mit Größerzeichen 
10.
>>con echo %nowline%1 
11.
das ist jetzt nur ein Test :)1 
12.
#### auch die "1" am Ende wird mit umgeleitet 
13.
>(echo %nowline%) 
14.
")" ist syntaktisch an dieser Stelle nicht verarbeitbar. 
15.
### der von WindowsUser1984 beschriebene Fehler
Grüße
Biber

P.S. Aber sicherlich "schneller" (relativ) und wesentlich pflegbarer ist bastla's VBS-Trimmer-Trümmer.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Microsoft Office
gelöst Dropdownlisten in Abhängigkeit mit Leerzeichen im Namen (Datenüberprüfung) (2)

Frage von kevische zum Thema Microsoft Office ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...