svenac2010
Goto Top

Suchen ersetzen vbs script ab Zeichen X

Hallo,
ich verwendet folgendes Script um in einer CSV Datei Daten ersetzen zu lassen

Dim objFso
 Dim objWshShell
 Set objFso = WScript.CreateObject("Scripting.FileSystemObject")  
 Set objWshShell = WScript.CreateObject("WScript.Shell")  

 Dim dieDatei, Rueckgabe, dateiAngabe, Servername

 dateiAngabe = "C:\temp\DTAG.csv"  
 
Set dieDatei = objFso.OpenTextFile(dateiAngabe, 1)
 Rueckgabe=Replace(dieDatei.ReadAll,"ISBN","DATG")  
 Set dieDatei = objFso.OpenTextFile(dateiAngabe, 2)
 dieDatei.Write(Rueckgabe)
 
 Set dieDatei = objFso.OpenTextFile(dateiAngabe, 1)
 Rueckgabe=Replace(dieDatei.ReadAll,"BTST","")  
 Set dieDatei = objFso.OpenTextFile(dateiAngabe, 2)
 dieDatei.Write(Rueckgabe)
 
 
dieDatei.Close

Es wird nach ISBN gesucht und durch "DATG" ersetzt,
funktioniert auch soweit ganz gut,
nur was muss ich verändern, wenn er alles AB dem Zeichen"BTST" löschen soll und nicht wie in diesem Fall ersetzen durch ""

Über eine Information wäre ich dankbar.

Content-Key: 208388

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

Printed on: April 25, 2024 at 08:04 o'clock

Member: colinardo
colinardo Jun 20, 2013 at 16:55:02 (UTC)
Goto Top
hi svenac2010,
Rueckgabe = Left(dieDatei.ReadAll,Instr(1,dieDatei.ReadAll,"BTST")+4)  

face-wink Uwe
Member: Biber
Biber Jun 20, 2013 at 17:52:28 (UTC)
Goto Top
[OT]

Moin colinardo,

is' sich ja ein guter Plan - außer wenn nun in der behandelten Datei mal kein String "BTST" gefunden wird.
Dann ist die "neue" Datei auch nur Left(dieDatei.ReadAll, 0 +4 ) Zeichen lang.

Geht mich ja nix an, aber Schattenparker wie ich würden vor lauter Angst noch eine IF-Abfrage "isdenn Instr(,,) > 0" drumherumwickeln.

Grüße
Biber
[/OT]
Member: colinardo
colinardo Jun 20, 2013 at 18:04:59 (UTC)
Goto Top
Klar, ging ja nur ums Prinzip ohne den üblichen Kladeradatsch =8-)
Grüsse Uwe
Member: bastla
bastla Jun 20, 2013 at 19:55:34 (UTC)
Goto Top
Hallo svenac2010!

Noch als Anmerkung: Das zwischenzeitliche Schreiben und neuerliche Einlesen ist relativ sinnfrei - da der gesamte Dateiinhalt sich ja ohnehin schon in der Variablen "Rueckgabe" befindet, kann dieser einfach per
M = "BTST"  
P = InStr(Rueckgabe, M)
If  P > 0 Then Rueckgabe = Left(Rueckgabe, P + Len(M))
aufbereitet und dann wieder geschrieben werden ...

Grüße
bastla
Member: svenac2010
svenac2010 Jun 21, 2013 updated at 05:58:20 (UTC)
Goto Top
Hallo,

vielen Dank für die Rückmeldungen

erweiter ich meinen code mit den Zeilen von Bastla
passiert selber nichts, daraufhin habe ich den Code so erweitert

Dim objFso
 Dim objWshShell
 Set objFso = WScript.CreateObject("Scripting.FileSystemObject")  
 Set objWshShell = WScript.CreateObject("WScript.Shell")  

 Dim dieDatei, Rueckgabe, dateiAngabe, Servername

 dateiAngabe = "C:\temp\DTAG.csv"  
 
Set dieDatei = objFso.OpenTextFile(dateiAngabe, 1)
 Rueckgabe=Replace(dieDatei.ReadAll,"ISBN","DATG")  
 Set dieDatei = objFso.OpenTextFile(dateiAngabe, 2)
 dieDatei.Write(Rueckgabe)


 M = "BTST"  
 P = InStr(Rueckgabe, M)
  Set dieDatei = objFso.OpenTextFile(dateiAngabe, 1)
  If  P > 0 Then Rueckgabe = Left(Rueckgabe2, P + Len(M))
   Set dieDatei = objFso.OpenTextFile(dateiAngabe, 2)
   dieDatei.Write(Rueckgabe)  

diedatei.close

leert er mir die gesamte Datei bis auf die erste Zeile

an welcher Stelle ist hier der Fehler?

Gruß
Sven
Member: colinardo
colinardo Jun 21, 2013 updated at 07:29:59 (UTC)
Goto Top
Hallo Sven,
da du eine CSV-Datei erwähnst, ist der String in jeder Zeile vorhanden ?
poste uns doch bitte mal ein Beispiel aus der CSV ...

p.s.
back-to-topkorrigierter Code bei einmaligem vorhanden sein des Strings "BTST" in der Datei
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")  
Set objWshShell = WScript.CreateObject("WScript.Shell")  
dateiAngabe = "C:\temp\DTAG.csv"  
Set dieDatei = objFso.OpenTextFile(dateiAngabe, 1)
Rueckgabe=Replace(dieDateiRead.ReadAll,"ISBN","DATG")  
dieDatei.Close()
Set dieDatei = objFso.OpenTextFile(dateiAngabe, 2)
M = "BTST"  
P = InStr(Rueckgabe, M)
If P > 0 Then Rueckgabe = Left(Rueckgabe, P + Len(M))
dieDatei.Write(Rueckgabe)  
dieDatei.Close()
back-to-topAlternativ Code für das kürzen jeder Zeile ab dem String "BTST"
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")  
filePath = "C:\temp\DTAG.csv"   
Set objTextFileRead = objFSO.OpenTextFile(filePath, ForReading)
strFinal = ""  
Do Until objTextFileRead.AtEndOfStream
    strNextLine = objTextFileRead.Readline
    If strNextLine <> "" Then  
  		strSearch = "BTST"  
  		intStringPosition = InStr(strNextline, strSearch)
  		If intStringPosition > 0 Then 
  			strFinal = strFinal & Left(strNextLine,intStringPosition + Len(strSearch)) & vbCrLf 
  		Else
  			strFinal = strFinal & strNextLine & vbCrLf 
  		End if
    End if
Loop
objTextFileRead.Close()
Set objTextFileWrite = objFSO.OpenTextFile(filePath, ForWriting)
objTextFileWrite.Write(strFinal)
objTextFileWrite.Close()
Member: Biber
Biber Jun 21, 2013 updated at 07:20:52 (UTC)
Goto Top
[OT]
@svenac2010
Da warte ich schon seit Bestehen des Beitrags drauf, endlich mein "works as designed" loswerden zu können. Ich dachte mir schon, dass du das "alles" aus "alles löschen ab String x" im Titel und Anforderungsbeschreibung nicht so wörtlich meinst.

@colinardo
In den beiden letzten Schnipseln haben wir nun - wie bei einer echten Teamarbeit - bei den Variablennamen alle denkbaren Namenskonventionen verewigt.
Von "dateiAngabe" und "Rueckgabe" über "strNextLine" und "FinalString" nach "M" und "P" bis zum zusammengedenglischten "dieDateiWrite".

Im normalen Unternehmensalltag würden wir es jetzt genau so produktiv setzen.face-wink

Grüße
Biber
[/OT]