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

Problem mit Vb script beim suchen und speichern von bestimmten Abschnitt aus Textdatei

Frage Entwicklung

Mitglied: Dobihead

Dobihead (Level 1) - Jetzt verbinden

22.04.2008, aktualisiert 25.04.2008, 4780 Aufrufe, 14 Kommentare

Hi,

ich beschäftige mich nun seit ca. einer Woche mit VB Script. Bin also ein ziemlicher Anfänger und wollte aus einer Textdatei einen bestimmten Abschnitt in einer neuen textdatei speichern.
Nun habe ich mir nach dem durchlesen vers. Tutorials udn Foren ein Vb Script zusammen bebaut. Doch dieses Funktioniert nicht.

Hier ist das script

01.
Const forReading =1  
02.
 
03.
dim test, test1, head 
04.
Set fso = createObject("Scripting.FileSystemObject") 
05.
Set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\3C.txt", true) 
06.
Set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", forreading) 
07.
test = "abc" 
08.
do until test <> "PROE_FLEX3C" 
09.
lizdatei.skipline 
10.
test = lizdatei.readline 
11.
exit do 
12.
loop 
13.
head = "PROE 3C Lizenzen" 
14.
test1 = "cds" 
15.
do until test1 = "PROE_FundationAdv" 
16.
 
17.
text = text + lizdatei.readline 
18.
test1 = lizdatei.readline 
19.
 
20.
	exit do 
21.
 
22.
loop 
23.
oStream.WriteLine head 
24.
oStream.WriteLine text 
25.
lizdatei.close 
26.
ostream.close

Ich habe versucht den Abschnitt zwischen PROE_FLEX3C und PROE_FundationAdv versucht in einer neuen Textdatei zuspeichern.
Aber ich habe nur PROE-FLEX3c drinnen stehen.

Ich hoffe ihr könnt mir helfen.
Vielen Danke schon mal im Vorraus.

Mit freundlichen Grüßen Dobihead
Mitglied: tacker
22.04.2008 um 16:13 Uhr
salü!

lass ich deinen Scriptschnipsel durchlaufen, so krieg ich als output nur:

01.
PROE 3C Lizenzen 
02.
"erste Zeile der lizakt.txt"
dies ist jedoch nicht weiter verwunderlich, da du keine saubere schleife eingebaut hast, welche das ganze file absucht! die folgenden codezeilen generieren diesen output und alles andere wird eigentlich gar nicht beachtet!

01.
head = "PROE 3C Lizenzen"   ' erste zeile die geschrieben wird 
02.
... 
03.
text = text + lizdatei.readline  '  erste zeile die ausgelesen und niedergeschrieben wird 
04.
... 
05.
oStream.WriteLine head 
06.
oStream.WriteLine text
hier ein funktionierender scriptschnipsel von mir - kannst ja ma vergleichen und bei bedarf fragen stellen!

01.
dim fso  
02.
 
03.
set fso = createobject("Scripting.FileSystemobject") 
04.
Set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\3C.txt", true) 
05.
Set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", 1) 
06.
 
07.
ostream.writeline "PROE 3C Lizenzen" 
08.
 
09.
do while not lizDatei.AtEndOfStream 
10.
    line = lizdatei.readline() 
11.
    If instr(line, "PROE_FLEX3C") > 0 then 
12.
        line = lizdatei.readline() 
13.
        do until instr(line, "PROE_FundationAdv") > 0 
14.
           ostream.writeline line 
15.
           line = lizdatei.readline() 
16.
        Loop 
17.
    End If                     
18.
Loop 
19.
 
20.
lizdatei.close 
21.
ostream.close

gruss tacker
Bitte warten ..
Mitglied: Dobihead
22.04.2008 um 17:08 Uhr
Danke dir Tacker.

Hat funktioniert, musste nur noch die instr funktion anpassen, das er den Textvergleich macht.

Noch mal für mich zum Verständis.
Es wird jede zeile bis zum ende der Datei eingelesen und in die variable line gespeichert, sobald der Suchwert vorkommt, speichert er die nächsten Zeilen in die neue Datei. Das macht er solange bis der zweite suchwert gefunden wurde. Ist das soweit richtig?

Ich hab da gleich nochmal ein Frage:

Ich bekomme eine String zurück, aus diesen möchte ich aber nur einen bestimmten wert in die datei schreiben. würde das gehen wenn ich die Bedinungen dafür in die schleife mit rein bringe?

wenn ja würde ich das probieren und dir das Script, zeigen fals es nicht geht.

Danke im vorraus für deine Antwort.

Mit freundlichen Grüßen Dobihead
Bitte warten ..
Mitglied: Dobihead
22.04.2008 um 17:43 Uhr
So dass hätte ich dann auch geschafft. Ich in der zweiten Schliefe mit InStrRev und mid gearbeitet.

Das sieht dann so aus
01.
dim fso  
02.
 
03.
set fso = createobject("Scripting.FileSystemobject") 
04.
Set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\3C.txt", true) 
05.
Set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", 1) 
06.
 
07.
ostream.writeline "PROE 3C Lizenzen" 
08.
 
09.
do while not lizDatei.AtEndOfStream 
10.
    line = lizdatei.readline() 
11.
    If instr(1, line, "PROE_FLEX3C", 1) > 0 then 
12.
        line = lizdatei.readline() 
13.
        do until instr(1, line, "PROE_FoundationAdv", 1) > 0 
14.
	   pos = InStrRev(line, "@") 
15.
	   name = mid (line, pos, 10) 
16.
           ostream.writeline name 
17.
           line = lizdatei.readline() 
18.
        Loop 
19.
    End If                     
20.
Loop 
21.
 
22.
lizdatei.close 
23.
ostream.close 
24.
 
25.
 
Nun hab ich das Problem, dass der Rückgabe String name immer unterschiedlich lang ist. Wenn ich bei mid den Wert auf den längsten String setze, dann bekomm ich bei kürzen zeichen mit, die ich nicht will.

Gibt es da ne andere Lösung bzw Funktion oder ähnliches?

Mit freundlichen Grüßen Dobi
Bitte warten ..
Mitglied: tacker
22.04.2008 um 19:34 Uhr
n'abend!

gib doch ma ein beispiel, wie deine Datei "lizakt.txt" ungefähr aussieht und was du daraus genau haben willst!

Gruss tacker
Bitte warten ..
Mitglied: Dobihead
23.04.2008 um 00:05 Uhr
naja meine txt sieht ungefähr so aus:

(xxxxxx@xxxxxxx) server adressen port usw....
(xxxxxx@xxxxxx) server adressen port usw....
(xxxxxx@xxxxxxxxx) server adressen port usw....

bekomme max 3 Einträge. Ich benötige nur die xxxxxx nach dem @. Habe heut abend mich noch mal damit beschäftigt. Ich denkle das die Lösugn ei Vergleich ist, aber wie mache ich den? gibt es da auch ein Funktion wie InStrRev?

Gruß Dobi
Bitte warten ..
Mitglied: tacker
23.04.2008 um 08:47 Uhr
guten morgen!

halt dich doch einfach an ein eventuelles zweites zeichen, welches noch vorkommt, anhand welchem du dann mit der funktion mid() den endpunkt bestimmen kannst...

tacker
Bitte warten ..
Mitglied: Biber
23.04.2008 um 09:18 Uhr
... ganz unelegant, aber ausreichend wäre....
[Annahme: line ist "(xxxxxx@xxxxxxx) server adressen port usw...."]
01.
... 
02.
	   pos = InStrRev(line, "@") 
03.
	   name = mid (line, pos, 10) 
04.
	   pos = InStrRev(name, ")") 
05.
	   name = left (line, pos-1) 
06.
  ...
-oder, nicht ganz so hölzern-
01.
... 
02.
	   pos = InStrRev(line, "@") 
03.
	   name = mid (line, pos, InStrRev(line, ")"-1 )- pos)
[...wie immer ungetestet]

Grüße
Biber
Bitte warten ..
Mitglied: Dobihead
23.04.2008 um 18:42 Uhr
Ich danke euch beiden für eure Hilfe.
Hab das jetzt so gelöst.

01.
 
02.
dim fso  
03.
 
04.
set fso = createobject("Scripting.FileSystemobject") 
05.
Set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\3C.txt", true) 
06.
Set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", 1) 
07.
 
08.
ostream.writeline "PROE 3C Lizenzen" 
09.
 
10.
do while not lizDatei.AtEndOfStream 
11.
    line = lizdatei.readline() 
12.
    If instr(1, line, "PROE_FLEX3C", 1) > 0 then 
13.
        line = lizdatei.readline() 
14.
        do until instr(1, line, "PROE_FoundationAdv", 1) > 0 
15.
	   posv = InStrRev(line, "@") 
16.
	   posh = InStrRev(line, ")") 
17.
	   name = mid (line, posv+1, posh-posv) 
18.
           ostream.writeline name 
19.
           line = lizdatei.readline() 
20.
        Loop 
21.
    End If                     
22.
Loop 
23.
 
24.
lizdatei.close 
25.
ostream.close 
26.
 
Nun bin ich dabei das Datum und Zeit als Dateiname, wann die Datei erstellt wurde, verwendet wird. Das bekomme ich bestimmt auch hin. Es müsste doch mit date und Time funktionieren oder?

Gruß Dobihead
Bitte warten ..
Mitglied: Biber
23.04.2008 um 19:04 Uhr
Moin dobihead,

An die Datei-Erstellungs/Änderungzeiten zu kommen ist kein Problem mehr, wenn Du schon das FileSystemObject instanziert hast und auch den Dateinamen weißt...
01.
... 
02.
Set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", 1) 
03.
...  
04.
' lesen, anzeigen, ... 
05.
... 
06.
lizdatei.close 
07.
 
08.
Set f = fso.GetFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt") 
09.
ostream.WriteLine "LizDatei vom " & f.DateCreated  ' oder .DateModified
Grüße
Biber
Bitte warten ..
Mitglied: Dobihead
23.04.2008 um 21:33 Uhr
01.
 Set f = 
02.
 fso.GetFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt") 
03.
 ostream.WriteLine "LizDatei vom " 
04.
 & f.DateCreated  ' oder .DateModified 
05.
 
Dabei überschreib ich doch meine vorhandene datei lizakt.txt oder? Wenn ja und ich die datei §c.txt ändern will, brauch ich das doch "nur" zu ersetzen oder?

Gruß Dobihead
Bitte warten ..
Mitglied: Biber
23.04.2008 um 22:00 Uhr
Dabei überschreib ich doch meine vorhandene datei lizakt.txt oder?
Hätte ich Dir dann die GetFile()-Methode in die Hand gedrückt? *beleidigt guck*

Sorry, hatte falsch gelesen.
Ich dachte, du wolltest das Dateidatum der lizakt.txt in Deine oStream-Datei schreiben...

Nehme alles zurück
Biber
Bitte warten ..
Mitglied: tacker
23.04.2008 um 23:02 Uhr
salü

ausgehend von deinem codeschnipsel einfach abändern auf...

01.
dim fso  
02.
 
03.
set fso = createobject("Scripting.FileSystemobject") 
04.
Set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\" & date() & "_" & time() & "_3C.txt", true) 
05.
Set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", 1) 
06.
 
07.
ostream.writeline "PROE 3C Lizenzen" 
08.
 
09.
do while not lizDatei.AtEndOfStream 
10.
    line = lizdatei.readline() 
11.
    If instr(1, line, "PROE_FLEX3C", 1) > 0 then 
12.
        line = lizdatei.readline() 
13.
        do until instr(1, line, "PROE_FoundationAdv", 1) > 0 
14.
	   posv = InStrRev(line, "@") 
15.
	   posh = InStrRev(line, ")") 
16.
	   name = mid (line, posv+1, posh-posv) 
17.
           ostream.writeline name 
18.
           line = lizdatei.readline() 
19.
        Loop 
20.
    End If                     
21.
Loop 
22.
 
23.
lizdatei.close 
24.
ostream.close
die genaue formatierung wie du des brauchst kriegste bestimmt auch noch selber hin ;)

gruss tacker
Bitte warten ..
Mitglied: Dobihead
25.04.2008 um 08:42 Uhr
Morgen,

hab das jetzt so gelöst. Nur mal das geänderte, sonst wird das immer so lang^^
01.
dim fso 
02.
zeit= FormatDateTime (Now,  4) 
03.
zeit = replace (zeit, ":", "-") 
04.
datum = year(now) & "-" 
05.
datum = datum & month(now) & "-"  
06.
datum = datum & day(now) 
07.
 
08.
set fso = createobject("Scripting.FileSystemobject") 
09.
set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\" & datum & "_" & zeit &  "_Flex3C.txt", true) 
10.
.......

Aber aber noch das Problem, das der Monat nicht mit 04 sondern nur 4 angezeigt wird. aber daüfr find ich bestimtm auch noch ne Lösung.

Mit freundlichen Grüßen Dobihead
Bitte warten ..
Mitglied: Dobihead
25.04.2008 um 09:01 Uhr
Das ging schneller als gedacht. Hier ist mein kompletter Code, vllt bruacht das jemand anderes auch mal. Datums- und Zeitformatierung erfolgt nach den schema yyyy-mm-dd_hh-mm

01.
 
02.
dim fso 
03.
zeit = FormatDateTime (Now,  4) 
04.
zeit = replace (zeit, ":", "-") 
05.
datum = year(now) & "-" 
06.
datumwert = instr (month(now), "0") 
07.
if datumwert = 0 then 
08.
	datum = datum & "0" & month(now) 
09.
	else 
10.
	datum = datum  & month(now) 
11.
end if 
12.
datum = datum & "-" & day (now) 
13.
msgbox test 
14.
msgbox datum 
15.
set fso = createobject("Scripting.FileSystemobject") 
16.
set ostream = fso.createTextfile("D:\PTC\proiclient3.4\bin\start\" & datum & "_" & zeit &  "_Flex3C.txt", true) 
17.
 
18.
set lizDatei = fso.OpenTextFile("D:\PTC\proiclient3.4\bin\start\lizakt.txt", 1) 
19.
 
20.
 
21.
ostream.writeline "PROE Flex 3C Lizenzen" 
22.
 
23.
do while not lizDatei.AtEndOfStream 
24.
    line = lizdatei.readline() 
25.
    If instr(1, line, "PROE_FLEX3C", 1) > 0 then 
26.
        line = lizdatei.readline() 
27.
        do until instr(1, line, "PROE_FoundationAdv", 1) > 0 
28.
	   posv = InStrRev(line, "@") 
29.
	   posh = InstrRev(line, ")") 
30.
	   name = mid (line, posv+1, posh-posv-1) 
31.
	   ostream.writeline name 
32.
           line = lizdatei.readline() 
33.
        Loop 
34.
    End If                     
35.
Loop 
36.
 
37.
lizdatei.close 
38.
ostream.close 
39.
 
danke nochmal an Biber und tacker für Ihre Hilfeund Unterstüzung bei der Problemlösung.

Mit freundlichen Grüßen Dobihead
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...