Winst LineExists

Antworten
mro-rednet
Beiträge: 73
Registriert: 01 Jul 2008, 13:12
Wohnort: Mainz

Winst LineExists

Beitrag von mro-rednet »

Hallo, versuche mich gerade noch ein wenig daran, meine Skripte auszureifen, sodass auch fehler ins log eingetragen werden, bzw. der Schalter auf FAILED gesetzt wird.

hier erstmal der auszug meines Testskriptes:

Code: Alles auswählen

[Aktionen]
PatchTextFile_acrobat

if LineExistsIn ("fehler", "c:\test.log")
	IsFatalError
endif

[PatchTextFile_acrobat]
GoToTop
FindLine_Containing "Fehler"
Kurze Beschreibung:
Ich möchte kontrollieren, ob in der Datei test.log IRGENDWO der Begriff "Fehler" auftaucht. Dazu durchsuche ich zuerst das Dokument, und bleibe in der Zeile, in der der Begriff steht, damit "if LineExistsIn" den Begriff finden kann. (Da LineExistsIn scheinbar NUR in der ersten Zeile sucht ??????). Aber das Problem ist, dass bei der Funktion LineExistsIN der Pointer wieder auf den Anfang gesetzt wird und somit nicht in die entsprechende Zeile rutscht und anschließend naürlich nichts von "fehler" lesen kann.

----Warum ist das so, dass er immer wieder von vorne anfängt, bzw die Datei nicht von oben bis unten durch liest ???? ----

Ich hoffe irgendwer konnte wenigstens ein bisschen folgen !?!

Hier noch der Log dazu:

Code: Alles auswählen

If
    Starting query if file exist ...
  FileExists("C:\acrobatreader\logo.bmp")   <<< result true
Then
  Execution of PatchTextFile_acrobat
        FILE c:\test.log
    Item Pointer set to Top (before first line)
    Item no. 57 is containing 'FEHLER'
    Item Pointer set to 57
    c:\test.log saved back
EndIf

If
    Searching "fehler" in File "c:\test.log"
    Item Pointer set to Top (before first line)
    No item found containing 'FEHLER'
  LineExistsIn ("fehler", "c:\test.log")   <<< result false
Then
EndIf
___________________
0 errors
0 warnings


Benutzeravatar
d.oertel
uib-Team
Beiträge: 3319
Registriert: 04 Jun 2008, 14:27

Re: Winst LineExists

Beitrag von d.oertel »

Hi mro_ncd,

LineExistsIn ist geeignet um schnell auf ein Vorkommen zu prüfen.
PatchTextFile dient mehr zum editieren einer Textdatei weniger zur Analyse der selben.
Hier empfehlen wir:
Textdatei auf eine Stringliste lesen (loadTextFile)
und dann über die Stringliste iterieren
z.B. (not tested)

Code: Alles auswählen

DefstringList $mylist$
DefstringList $myline_list$
set $mylist$ = loadTextFile("c:\mylog.txt")
for $x$  in $mylist$ do sub_analyse_log_line

[sub_analyse_log_line]
set $myline_list$ =  splitStringOnWhiteSpace($x$ )
if takeString (0, $myline_list$) = "Error"
   logError "Fehler : "+$x$
   isFatalError
endif
does this help ?

gruss
detlef oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org
mro-rednet
Beiträge: 73
Registriert: 01 Jul 2008, 13:12
Wohnort: Mainz

Re: Winst LineExists

Beitrag von mro-rednet »

dankeschön, aber irgendwie läuft es nicht:

dann scheint für jede Zeile immer ein Fehler aufzugehen :

Sektion sub_analyse_log_line (kommando in Zeile 17):
$myline_list$ = splitStringOnWhiteSpace()
Test1000) kein zulässiger String Ausdruck

Die test.log sieht folgendermaßen aus:

Code: Alles auswählen

Test1000
Test2000
Test3000
Test4000
Test5000
Hier steht ein Fehler
Ich kann leider den Fehler nich finden. Das Skript habe ich erstmal überarbeitet und dann im original eingesetzt, beides mit Fehlern.
was sollte für das x eingesetzt werden und was macht "splitStringOnWhiteSpace ????


hier die LOG

Code: Alles auswählen


(created string list $mylist$)

(created string list $myline_list$)

Set  $mylist$ = loadTextFile("c:\test.log")
    retrieving strings from loadTextFile:
        (string   0)Test1000
        (string   1)Test2000
        (string   2)Test3000
        (string   3)Test4000
        (string   4)Test5000
        (string   5)hier ist ein fehler
    retrieving strings from $mylist$:
        (string   0)Test1000
        (string   1)Test2000
        (string   2)Test3000
        (string   3)Test4000
        (string   4)Test5000
        (string   5)hier ist ein fehler

~~~~~~ Looping through:  'Test1000', 'Test2000', 'Test3000', 'Test4000', 'Test5000', 'hier ist ein fehler
  
  ~~~~~~~ Start Sub ~~~~~~~  sub_analyse_log_line
  
  Set  $myline_list$ = splitStringOnWhiteSpace (Test1000 )
  
  If
      retrieving strings from $myline_list$:
  effective list index 0 not in bounds 0, -1
  takeString (0, $myline_list$) = "Error"   <<< result false
Then
EndIf
  
  ~~~~~~~ End Sub   ~~~~~~~  sub_analyse_log_line
  
  
  ~~~~~~~ Start Sub ~~~~~~~  sub_analyse_log_line
  
  Set  $myline_list$ = splitStringOnWhiteSpace (Test2000 )
  
  If
      retrieving strings from $myline_list$:
  effective list index 0 not in bounds 0, -1
  takeString (0, $myline_list$) = "Error"   <<< result false
Then
EndIf
  
  ~~~~~~~ End Sub   ~~~~~~~  sub_analyse_log_line
  
  
  ~~~~~~~ Start Sub ~~~~~~~  sub_analyse_log_line
  
  Set  $myline_list$ = splitStringOnWhiteSpace (Test3000 )
  
  If
      retrieving strings from $myline_list$:
  effective list index 0 not in bounds 0, -1
  takeString (0, $myline_list$) = "Error"   <<< result false
Then
EndIf
  
  ~~~~~~~ End Sub   ~~~~~~~  sub_analyse_log_line
  
  
  ~~~~~~~ Start Sub ~~~~~~~  sub_analyse_log_line
  
  Set  $myline_list$ = splitStringOnWhiteSpace (Test4000 )
  
  If
      retrieving strings from $myline_list$:
  effective list index 0 not in bounds 0, -1
  takeString (0, $myline_list$) = "Error"   <<< result false
Then
EndIf
  
  ~~~~~~~ End Sub   ~~~~~~~  sub_analyse_log_line
  
  
  ~~~~~~~ Start Sub ~~~~~~~  sub_analyse_log_line
  
  Set  $myline_list$ = splitStringOnWhiteSpace (Test5000 )
  
  If
      retrieving strings from $myline_list$:
  effective list index 0 not in bounds 0, -1
  takeString (0, $myline_list$) = "Error"   <<< result false
Then
EndIf
  
  ~~~~~~~ End Sub   ~~~~~~~  sub_analyse_log_line
  
  
  ~~~~~~~ Start Sub ~~~~~~~  sub_analyse_log_line
  
  Set  $myline_list$ = splitStringOnWhiteSpace (hier ist ein fehler )
  
  If
      retrieving strings from $myline_list$:
  effective list index 0 not in bounds 0, -1
  takeString (0, $myline_list$) = "Error"   <<< result false
Then
EndIf
  
  ~~~~~~~ End Sub   ~~~~~~~  sub_analyse_log_line
  

~~~~~~ End Loop
___________________
0 errors
0 warnings



Benutzeravatar
d.oertel
uib-Team
Beiträge: 3319
Registriert: 04 Jun 2008, 14:27

Re: Winst LineExists

Beitrag von d.oertel »

Hallo mro_ncd,

ok , mein Beispiel ging jetzt mal davon aus das in der Datei sowas steht wie:

Code: Alles auswählen

Fehler 12.12.08 Himmel auf den Kopf gefallen
splitStringOnWhiteSpace spaltet dann den String an den Leerzeichen (oder Tabs) in eine Stringliste auf
von der dann via takeString das erste (also 0) element genommen wird.
Wenn da in der Zeile nur "Fehler" steht, hat der splitStringOnWhiteSpace offensichtlich ein Problem.
Wird in der Praxis aber eher selten sein - oder.
Im Zweifelsfall einfach vorher schon prüfen ob
$x$ = "Fehler"

gruss
detlef oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org
Antworten