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-ID: 208388

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

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

colinardo
colinardo 20.06.2013 um 18:55:02 Uhr
Goto Top
hi svenac2010,
Rueckgabe = Left(dieDatei.ReadAll,Instr(1,dieDatei.ReadAll,"BTST")+4)  

face-wink Uwe
Biber
Biber 20.06.2013 um 19:52:28 Uhr
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]
colinardo
colinardo 20.06.2013 um 20:04:59 Uhr
Goto Top
Klar, ging ja nur ums Prinzip ohne den üblichen Kladeradatsch =8-)
Grüsse Uwe
bastla
bastla 20.06.2013 um 21:55:34 Uhr
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
svenac2010
svenac2010 21.06.2013 aktualisiert um 07:58:20 Uhr
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
colinardo
colinardo 21.06.2013 aktualisiert um 09:29:59 Uhr
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()
Biber
Biber 21.06.2013 aktualisiert um 09:20:52 Uhr
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]