goblins
Goto Top

VBS entfernen von "Grad" Zeichen in TXT Datei

Hallo zusammen,
ich habe hier ein Problem mit dem entfernen von dem Zeichen " ° " in einer TXT Datei mit VBS.

Der Aufbau der TXT Datei sieht wie folgt aus:

90.809° ;9;1

Benötigt wird aber:

90.809 ;9;1

Ich habe folgendes script versucht:

Datei = "C:\Test\\test.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
T = fso.OpenTextFile(Datei).ReadAll
fso.CreateTextFile(Datei).Write Replace(T, "° ;9;1", ";9;1")  

Ich habe schon verschiedene Versionen (nur das ° bzw. den ganzen Block) versucht, leider ohne Erfolg.
Wenn ich allerdings die "." durch ein "," ersetzen lasse, funktioniert das ganze ohne Probleme.

Kann mir hier evtl. jemand helfen?

Vielen Dank

Content-Key: 611141

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

Printed on: April 26, 2024 at 11:04 o'clock

Mitglied: 146189
146189 Oct 08, 2020 updated at 08:43:36 (UTC)
Goto Top
Schau dir mal den letzten Parameter der Replace-Funktion an ("compare"), dann wirst du erkennen das per Default ein "Binary" Vergleich vorgenommen wird und kein reiner Textvergleich. D.h. also wenn dann die Skriptdatei ein anderes Encoding hat als die Zieldatei es mit "Binary" und solche Sonderzeichen Probleme gibt wie du gerade siehst, nimm also den als letzten Parameter vbTextCompare bzw. alternativ eine 1:
https://www.w3schools.com/asp/func_replace.asp
Replace(T, "°", "",1,-1,1)
Zusätzlich sollte man natürlich beachten welches Encoding die Textdatei hat und beim Einlesen mit OpenTextfile die entspprechende Option setzen. Zum Einlesen und Beschreiben von UTF8 Files sollte man stattdessen auf ein ADODB.Stream Objekt ausweichen.
Member: Goblins
Goblins Oct 08, 2020 at 10:01:47 (UTC)
Goto Top
Hallo window,

vielen Dank für die schnelle Antwort. Leider übersteigt das jetzt meine Kenntnisse.
Der Bereich
Replace(T, "°", "",1,-1,1)  
verstehe ich zwar noch, allerdings funktioniert es nicht.

Mit ADODB.Stream kann ich leider nichts anfangen. Dafür reichen meine Kentnisse nicht aus.
Könntest du mir dabei noch ein wenig zur Hand gehen, damit ich das verstehe.

Soweit ich weis, ist die Standarddatei eine UTF8

Vielen Dank
Mitglied: 146189
Solution 146189 Oct 08, 2020 updated at 10:04:58 (UTC)
Goto Top
Sub WriteUTF8(file, txt)
  With CreateObject("ADODB.Stream")  
  	.Type = 2 : .Charset = "UTF-8" : .Open  
  	.WriteText txt
  	.SaveToFile file, 2
  	.Close
  End With
End Sub

Function ReadUTF8(file)
	With CreateObject("ADODB.Stream")  
		.Type = 2 : .Charset = "UTF-8" : .Open : .LoadFromFile(file)  
		ReadUTF8 = .ReadText
		.Close
	End With
End Function


txt = Replace(ReadUTF8("C:\Test\test.txt"),"°","",1,-1,1)  
WriteUTF8 "C:\Test\test_neu.txt", txt  
Mitglied: 146189
146189 Oct 13, 2020 at 14:47:59 (UTC)
Goto Top
Bitte dann auch den Beitrag als gelöst markieren. Danke.
Member: Goblins
Goblins Oct 21, 2020 at 11:18:37 (UTC)
Goto Top
Hallo Window,

leider war ich, auf Grund eines längeren ungewollten Krankenhaus Aufenthaltes komplett außer Gefecht. Konnte mich erst heute wieder mit dem Thema beschäftigen.
Musste bei meiner heutigen Recherche feststellen, dass die Info die man mir gegeben hat leider falsch ist.

Die vorhandene Datei wird als ANSI nicht als UTF-8 gespeichert. Benötigt wird aber eine UTF-8.
Dadurch erhalte ich wohl nach dem durchlaufen von deinem Script zwar kein ° Zeichen mehr, dafür aber ein kleines Quadrat, welches, wenn ich es hier her kopiere zu einem � wird. Gehe davon aus das es sich hier wiederum um ein Kodierungsproblem handelt.

Gibt es da eine Möglichkeit das zu ändern, bzw. könntest du mir dabei nochmal helfen?

Vielen Dank
Mitglied: 146189
Solution 146189 Oct 21, 2020 updated at 11:45:14 (UTC)
Goto Top
Zitat von @Goblins:
Gibt es da eine Möglichkeit das zu ändern, bzw. könntest du mir dabei nochmal helfen?
Dann ändere halt in der Funktion zum Einlesen der Daten (ReadUTF8) das Encoding in der entsprechenden Property auf
.Charset = "iso-8859-1"
Mitdenken erwünscht ...
https://docs.microsoft.com/en-us/previous-versions/exchange-server/excha ...
Member: Goblins
Goblins Oct 22, 2020 at 07:45:59 (UTC)
Goto Top
Vielen Dank für deine Unterstützung.