100320
Goto Top

Zeile in Textdatei einfügen mit VBScript

Hallo,
erstmal ein Hallo an die Community face-smile

ich möchte einen String (Sequenznr) in eine Textdatei über VBS einfügen.
String ist in meinem Beispiel die "Sequenznr"

Der String soll immer an der gleichen Stelle in der Textdatei stehen. Entweder als erstes oder nach einem bestimmten Begriff

Meine Idee ist dass nach einem Begriff gesucht wird, wäre in meinem Besipiel der Begriff " Bediener". Dieser Begriff ist immer fest und in jeder Textdatei vorhanden.
Nach diesem Begriff soll der String/Zeile eingefügt werden.

Hab schon lange gesucht doch nichts genaues gefunden.
Hoffe auf Hilfe ;)

Hier mein bisheriger Code: ( Hier wird die Sequenznr zusammengebaut)
today = Date()
Dim present 
present = Time()
Zeitstempel = Year(today) & right("0" & Month(today), 2) & right("0" & Day(today), 2) & right("0" & Hour(present), 2) & right("0" & Minute(present), 2) & right("0" & Second(present), 2)  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set oFile = fso.OpenTextFile("M:\Matt\_16_VBS\Datapage\52585.txt")  
i=0
' Erstmal zählen wieviele Einträge  
while not oFile.AtEndOfStream
i=i+1
oFile.ReadLine
Wend
oFile.Close
' Array definieren  
REDIM sEingabe(i)
Set oFile = fso.OpenTextFile("M:\Matt\_16_VBS\Datapage\52585.txt")  
i=0
' Jetzt Werte ins Array übernehmen  
while not oFile.AtEndOfStream
sEingabe(i)=oFile.ReadLine
i=i+1
Wend
oFile.Close
'Beispiel für Zugriff  

for j= 1 to i
if Instr(sEingabe(j), "Auftragsnummer") then   
Auftragsnr = mid(sEingabe(j), 18)
end if
next
for k= 1 to i
if Instr(sEingabe(k), "Werkzeugnummer") then   
Werkzeugnr = mid(sEingabe(k), 18)
end if
next
for m= 1 to i
if Instr(sEingabe(m), "Chargennummer") then   
Chargennr = mid(sEingabe(m), 17)
end if
next
Sequenznr = Zeitstempel & "$" & Auftragsnr & "$" & Werkzeugnr & "$" & Chargennr  

msgbox Sequenznr

Const ForReading = 1, ForWriting = 2, ForAppending = 8
set File = fso.OpenTextFile("M:\Matt\_16_VBS\Datapage\52585.txt")
strGelesen = File.ReadAll
strGelesen = Replace(strGelesen,";",",")

msgbox strgelesen

bis hierhin läuft der Code einwandfrei.

Der Kopf der Textdatei ist folgendermaßen aufgebaut:

Datum: 27.05.2011 11:14:40
Merkmalname;Sollwert;UT;LT;Gemessen
Bauteilname - 52285 Zylinderkopf 01
Bediener - Eichhorn
Prüfplannummer - 010 33 52585
Auftragsnummer - 208991
Werkzeugnummer - Nest1
Chargennummer - 759427
Hinweis -
Fehler - aktive Ausrichtung - 0,000mm
P04-02-08-24124 Aktueller Gerätefehler -

Möglichkeit 1 wäre die Sequenznr als erstes zu positionieren. Über dem Datum!(was mir am liebsten wäre)
Möglichkeit 2 wäre die Sequenznr hinter der Zeile "Bediener" einzufügen.

Momentan habe ich so angefangen dass ich mit einer for schleife nach Bediener suche den habe ich auch gefunden doch wenn ich nun versuche mit writeline etwas einzufügen schreibt es mir nur die Sequenznr in die Textdatei und löscht den Rest.

Ich mache viel mit VBA doch VBS ist doch etwas anderst und manchmal komme ich nicht weiter.
ich denke das es nicht so schwer sein kann es zu programmieren, doch ich finde keine Hilfe dazu und komm nicht weiter.
Hoffe es war einigermaßen verständlich meine Erklärung.

Grüße und schon jetzt vielen Dank ;)
Markus

Content-Key: 167264

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

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

Member: bastla
bastla May 31, 2011 at 13:12:44 (UTC)
Goto Top
Hallo faro01 und willkommen im Forum!

Als Kurzfassung: Wenn es nur eine Zeile gibt, die mit "Datum:" beginnt, würde ich einfach ein weiteres "Replace()" verwenden - also etwa:
strGelesen = Replace(strGelesen, "Datum:", Sequenz & vbCrLf & "Datum:")
Dadurch wird anstelle von "Datum:" Deine Sequenz + eine Zeilenschaltung + wieder "Datum:" in den String eingefügt.

Wenn Du fertig bist, brauchst Du nur ein einziges "Write" für den gesamten String auszuführen.
Um übrigens ein Array "sEingabe()" für die Zeilen der Datei "M:\Matt\_16_VBS\Datapage\52585.txt") zu erhalten, würde
sEingabe = Split(fso.OpenTextFile("M:\Matt\_16_VBS\Datapage\52585.txt").ReadAll, vbCrLf)
genügen. Den höchsten Index von "sEingabe" findest Du dann mit "UBound()"

Grüße
bastla
Mitglied: 100320
100320 May 31, 2011 at 13:21:13 (UTC)
Goto Top
Erst einmal danke für die schnelle Antwort.

wenn ich es richtig verstanden habe, wird durch den replace() das datum durch die Sequenznr ersetzt und nach dem Zeilenumbruch wieder das datum eingefügt?

Das datum habe ich leider in keiner Variable ist das hier egal? das datum steht fest in der Textdatei.

Kannst du mir vll noch erklären was du meinst mit write? Verstehe es leider nicht ganz wie ich das ganze in die Textdatei schreibe und es dann so bleibt.

Grüße
Member: Skyemugen
Skyemugen May 31, 2011 at 13:24:26 (UTC)
Goto Top
Aloha und willkommen im Forum,

weil der bastla dieses Mal nicht gleich (bei der Flut im EP) auf die (mit Hilfe der Tags) hingewiesen hat, möchte ich das tun, weil es dann doch optisch ansprechender und einfacher ist zu lesen.

greetz André
Member: TsukiSan
TsukiSan May 31, 2011 at 13:25:31 (UTC)
Goto Top
Hallo faro01,

höre auf bastla! face-wink

hier mal kurz was zusammengebaut, was dich interessieren könnte:
Zeitstempel = Year(today) & right("0" & Month(today), 2) & right("0" & Day(today), 2) & right("0" & Hour(present), 2) & right("0" & Minute(present), 2) & right("0" & Second(present), 2)  

Set fso = CreateObject("Scripting.FileSystemObject")  
oFile = fso.OpenTextFile("C:\Sequenz.txt",1).ReadAll  

Moeglichkeit1 = Zeitstempel &vbcrlf & oFile

msgbox Moeglichkeit1

oFile = Split(fso.OpenTextFile("C:\Sequenz.txt",1).ReadAll,"Bediener - ")  

Moeglichkeit2 = Join(oFile,"Bediener - " & Zeitstempel)  

msgbox Moeglichkeit2

der write-Befehl dient dann dazu, die gesamten Infos wieder als neue Datei abzulegen.
Als Beispiel:
fso.CreateTextFile("C:\Sequenz.txt", True).Write Moeglichkeit1  

Gruss
Tsuki
Mitglied: 100320
100320 May 31, 2011 at 13:31:20 (UTC)
Goto Top
Vielen Dank!

euch beiden!! ;)

Es funktioniert einwandfrei!!
Ich habe mir darüber den halben Tag den Kopf zerbrochen und die Lösung ist so einfach! face-smile

...das nächste Mal denke ich auch an die Codeformatierung !!

Viele Grüße
Markus
Member: bastla
bastla May 31, 2011 at 13:32:32 (UTC)
Goto Top
Hallo faro01!
wenn ich es richtig verstanden habe, wird durch den replace() das datum durch die Sequenznr ersetzt und nach dem Zeilenumbruch wieder das datum eingefügt?
Nicht das "Datum", sondern der String "Datum:" (nach dem ja beim Ersetzen auch gesucht werden muss) ...
Zu "Write" siehe das Beispiel von Tsuki ...

Grüße
bastla
Mitglied: 100320
100320 May 31, 2011 at 13:51:21 (UTC)
Goto Top
Noch eine kleine Frage bezüglich meines Codes.

Ich habe den Code zum Testen nur auf eine datei ausgelegt, doch später sollen in dem Ordner meherer Textdateien vorhanden sein bei denen alle die Sequenznr eingefügt werden muss.

Wie muss ich da mein Code erweitern damit dies möglich ist?

Grüße
Member: TsukiSan
TsukiSan May 31, 2011 at 13:56:37 (UTC)
Goto Top
dazu eine kleine Antwort:
bau dir eine Schleife drum herum und google vorher nach GetFolder und ggf. Subfolders
in VBS.
Oder mach einen neuen Thread auf mit besagten Problem face-wink
Aber erst einmal die Suchmaschine anschmeissen und dann posten!

Gruss
Tsuki
Member: Snowman25
Snowman25 May 31, 2011 at 14:53:20 (UTC)
Goto Top
...das nächste Mal denke ich auch an die Codeformatierung !!
Könntest du bitte deinen Eingangspost auch entsprechend editieren?
Administrator.de bekommt viele Klicks von Suchmaschienenbenutzer, welche ihre Probleme lösen möchten. Da ist es angenehmer, wenn Code vom Text unterscheidbar und lesbar ist.

Gruß
Snow