Veröffentlicht 19. Juli 200619 j Hallo ihr alle... Ich stehe gerade vor einem kleinen Problem. Zum auslesen und weiterleiten von Rechnerdaten, hat mein Ausbilder mir ein prog besorgt was genau dies tun sollte. Ausgegeben wird letztendlich eine HTML Datei. Da das Programm zuerst eine Art Log Datei schreibt, wird schliesslich noch ein Script zum Umwandeln in HTML benötigt. Dieses ist in Form einer .vbs auch vorhanden. Das Problem welches sich mir hier auftut ist folgendes: a) Das Programm verheddert sich in einer Dauerschleife Da die ganze zeit weiter in eine HTML geschrieben wird, wird diese immer größer bis der virtuelle Speicher des Rechners nimmer ausreicht Die folgende Passage konnten wir bisher als Fehlerquelle definieren: '---Retrieve info from sorted tempfile and write results to snapshot Do Until TextStreamTemp.AtEndOfStream inputLine = TextStreamTemp.ReadLine inputLevel = Split(inputLine, ":", 4, 1) If (UBound(inputLevel) >= 3) Then 'skip empty lines '---Write SCC Class totals If currentSccClass <> inputLevel(0) Then TextStreamOut.WriteLine ("<TR>") TextStreamOut.WriteLine (" <TD>" & inputLevel(0) & "</TD>") TextStreamOut.WriteLine (" <TD>" & " " & "</TD>") TextStreamOut.WriteLine (" <TD>" & inputLevel(1) & "</TD>") TextStreamOut.WriteLine (" <TD>" & Round((inputLevel(1) / total) * 100) & "</TD>") TextStreamOut.WriteLine (" <TD>" & " " & "</TD>") TextStreamOut.WriteLine (" <TD>" & " " & "</TD>") TextStreamOut.WriteLine ("</TR>") currentSccClass = inputLevel(0) End If '---Write SubClass totals; general has no subclass. If inputLevel(2) <> "" Then TextStreamOut.WriteLine ("<TR>") TextStreamOut.WriteLine (" <TD>" & " " & "</TD>") TextStreamOut.WriteLine (" <TD>" & inputLevel(2) & "</TD>") TextStreamOut.WriteLine (" <TD>" & " " & "</TD>") TextStreamOut.WriteLine (" <TD>" & " " & "</TD>") TextStreamOut.WriteLine (" <TD>" & inputLevel(3) & "</TD>") TextStreamOut.WriteLine (" <TD>" & Round((inputLevel(3) / total) * 100) & "</TD>") TextStreamOut.WriteLine ("</TR>") End If End If Loop Nun ist es an dem armen kleinen Azubi (mir) den Fehler zu beheben. Da ich das nach 2 Tagen rumprobieren und rumforschen irgendwie noch nicht auf die Reihe bekommen habe bitte ich euch um Mithilfe... THX...Dere P.s.: Gerad ekam mein Ausbilder rüber und meinte dies sei gar ni der Primäre Punkt der Aufgabenstellen *rummoser*
19. Juli 200619 j Autor Mit was kann ich sowat denn Debuggen? Da es sich nur um ein Programmmodul handelt lässt sich dies schwerlich tun... Das HTML file krieg ich im nachhinein aus Speichergründen nicht geöffnet (knapp 200 MB groß)....
19. Juli 200619 j Autor eben das waren auch meine Gedanken, nur hab ich beim Durchssuchen des WWW kein Script gefunden wo im zusammenhang mit solch einem Loop ein Movenext o.ä. verwendet wird....
19. Juli 200619 j hab den eindruck da fehlt so ne art: movenext joa hab ich auch gedacht, aber vielleicht macht das auch schon das readline :confused: desswegen die frage nach dem debuggen und wie das HTML aussieht (immer gleiche daten oder wiedeholen sich unterschiedliche daten)? edit: zum debuggn breakpoint setzen!
19. Juli 200619 j Hi, ich kenn mich nicht so recht mit VB au, aber ich vermute es liegt an deiner Abbruchbedingung: "TextStreamTemp.AtEndOfStream" klingt für mich irgendwie komisch. Gibt es nicht andere Methoden, die dir zurückgeben, dass das ende erreicht ist. Ich hate früher mal mit VB zu tun und da hieß es dann immer StreamObjekt.EOF bzw. StreamObjekt.EnOfStream - also ohne At. Vielleicht hat dir das ja was gebracht... mfg Eytibi
19. Juli 200619 j "TextStreamTemp.AtEndOfStream" klingt für mich irgendwie komisch. Nein, das ist schon richtig so. So heißt das bei Scripting.FileSystemObject. Wir sind ja bei VBS, nicht VB. Eigentlich sollte der Code so funktionieren. Wie |roTekuGeL| schon sagte, es wäre interessant zu wissen, was hinterher in der Ausgabe steht, nachdem die Quelldatei eigentlich abgearbeitet sein sollte.
19. Juli 200619 j Autor danke euch erstmal....da, wie beschrieben, dieses Problem eher sekundär ist, werde ich das zu gegebenem Zeitpunkt ausprobieren, sprich wenn der ganze Rest lauffähig ist... Soweit shconmal danke für die Antworten Dere Nico
20. Juli 200619 j Autor So...nachdem ich mich gestern noch diverser anderer Probleme angenommen habe, bin ich nun heut morgen dazu gekommen mich wieder dem mit der Dauershcleife zu widmen. Es ist tatsächlich so, dass das Programm einfach nur eine leere endlose Tabelle produziert bis der Speicher voll <TR> <TD> </TD> <TD>file(s)</TD> <TD> </TD> <TD> </TD> <TD>C \WINNT\win.ini::layout=0</TD> </TR> Hrm...also ich habe keine wietere Idee was da nun zu tun wäre....Ihr vieleicht?
20. Juli 200619 j Bist du sicher, dass du uns den richtigen Code gezeigt hast? Der Code erzeugt Tabellenzeilen mit 6 <TD>-Tags. Deine Beispielausgabe hat nur 5.
20. Juli 200619 j Autor Das sollte de rrichtige sein. Denn wenn ich diese Schleife auskommentiere, bzw. ganz rausnehme funktioniert alles tadellos... Aber jetz wo du's sagst, merkwürdig is das shcon....
20. Juli 200619 j Ist da irgendein "On Error" drin? Falls ja, nimm das mal raus. Falls das der richtige Code ist, dann ist inputLevel(3) ein String mit dem Inhalt "C \WINNT\win.ini::layout=0". Der wird aber für das 6. Tabellenelement offenbar wie eine Zahl behandelt, was wenig sinnvoll ist. Und gib mal bitte aus, welchen Wert total an dieser Stelle hat. Kannst du die entsprechende Zeile in der Quelldatei finden? Was genau steht da drin? Steht die ganz am Ende?
20. Juli 200619 j Autor Also wenn ich den entsprechenden "On Error..." rausnehme läuft er ohne Probleme durch, hat dann allerdings nicht die beabsichtigte Tabelle dabei. An dieser Stelle hat "total" den "664" was natürlich einiges erklären würde, oder? Der Wert von Total errechnet sich aus der Addition der beiden Summanden Varcount und Fixcount, welche in folgender Schleife (gleiche Sub) berechnet werden: Do Until TextStreamIn.AtEndOfStream inputLine = TextStreamIn.ReadLine inputLevel = Split(inputLine, ":", 4, 1) If (UBound(inputLevel) >= 3) Then 'skip empty lines If (inputLevel(2) = currentSubClass) Then 'count number in subClass subClassCount = subClassCount + 1 Else 'calculate number of entries for each subclass If (currentSubClass <> "###start_sub_class###") Then count = count + 1 ReDim Preserve subClass(count) ReDim Preserve subCounter(count) subClass(count) = currentSubClass subCounter(count) = subClassCount End If currentSubClass = inputLevel(2) subClassCount = 1 End If If (inputLevel(1) = currentSccClass) Then 'increment scc class counter sccClassCount = sccClassCount + 1 Else 'write all subclasses and totals to tempfile If (currentSccClass <> "") Then For i = 1 To count TextStreamTemp.WriteLine (currentSccClass & _ ":" & _ sccClassCount & _ ":" & _ subClass(i) & _ ":" & _ subCounter(i)) Next End If currentSccClass = inputLevel(1) sccClassCount = 1 count = 0 ReDim subClass(count) ReDim subCounter(count) End If If (UCase(inputLevel(0)) = "FIX") Then 'increment fix and var counters fixCount = fixCount + 1 Else varCount = varCount + 1 End If End If Loop
20. Juli 200619 j Also wenn ich den entsprechenden "On Error..." rausnehme läuft er ohne Probleme durch, hat dann allerdings nicht die beabsichtigte Tabelle dabei.Wie sieht denn das "On Error" genau aus? Und wenn du es rausnimmst, läuft das Skript ohne Laufzeitfehler durch? An dieser Stelle hat "total" den "664" was natürlich einiges erklären würde, oder?Nein, ich hatte eigentlich auf 0 gehofft, denn Division durch Null könnte das Verhalten recht einfach erklären. Hast du die Zeile in der Quelldatei finden können?
20. Juli 200619 j Autor Es handelt sich um "On Error resume Next" ... Beim durchlauf bekomme ich immernoch keine fehlermeldung ausgespuckt. Ich werd mal sehen ob noch irgendwo andere Verbergen, die rauszunehmen sind... Hrm, stimmt, Division durch 0 wäre logisch gewesen... Von welcher zeile sprichst du genau?
20. Juli 200619 j Von welcher zeile sprichst du genau?Von der Zeile in der Quelldatei, aus der der Text "C \WINNT\win.ini::layout=0" stammt oder zusammengesetzt wird. Die wird ja offenbar falsch verarbeitet.
20. Juli 200619 j Autor Also ich hab die Stelle jetzt nicht gefunden. Da ich jetz noch ein paar andere Sachen zu tun habe, werde ich es auch erst einmal debei bewenden lassen. Sollte dieses Problem nun allerdings jemandem Schlaflose Nächte bereiten, weil er einfach viel ehrgeiziger ist als ich, dann kann er sich das Programm auch herunterladen und noch weiter tüfteln (positive Ergebnisse, wären dann natürlich schön zu lesen *g*) http://www.openeyet.nl/scc/download.html Die Install for windows ist die, die ich verwende (scc-0_10b.exe). Das problem befindet sich in der Scc2Html.vbs . An dieser Stelle schonmal vielen Lieben Dank für die Mithilfe an dieser Stelle. Sollte ich mich durchricngen können mich noch ein wenig mit dem problem zu befassen, werde ich hier umgehend Meldung geben... Wie gesagt Danke euch erstmal.... Dere nico
20. Juli 200619 j Hier liegt das Problem: '-------------------------------------------------------------------------- '--- '--- Initialization global variables '--- '-------------------------------------------------------------------------- defaultBinPath = "" strComputer = "." ForReading = 1 ForAppending = 8 defaultSCCFile = "scc.localhost.cur" defaultInputPath = "c:\[b]Program Files[/b]\SCC\data" defaultOutputPath = "c:\[b]Program Files[/b]\SCC\data" strSccPath = "C:\[b]Program Files[/b]\SCC\bin" [/code] Damit funktioniert der Code nur auf einem englischsprachigen Windows.
20. Juli 200619 j Autor cool, du hast ja wirklich noch weiter geschaut :-) Hrm...also mein Kollege meinte, dass es eigentlich keinen Einfluss haben sollte, deswegen bin ich das einfach übergangen...Hrm...Hast du probiert ob es funktioniert, wenn du den ganzen Mist ins Deutsche protierst?
20. Juli 200619 j Ja, dann geht's. Das Problem liegt letztendlich daran, dass im Skript eine Sort.bat im "falschen" bin-Ordner erstellt wird. Da der Pfad aber gar nicht existiert, wird die eben nicht erstellt, und auch nicht ausgeführt. Und mit unsortierten Daten kommt das Skript wohl nicht zurecht.
20. Juli 200619 j Autor Es geht!!!! Wie gesagt hab ich da auch shcon dran gedacht, aber aufgrund einer Fehlinformation den Gedanken nicht weiter verfolgt. Ich danke dir für die gute und vor allem schnelle Hilfe
20. Juli 200619 j Gern geschehen Zwei Hinweise möchte ich dir noch mitgeben: Der Kollege hat es sicher gut gemeint, als er dir sagte, dass sich das eigentlich nicht auswirken sollte. Entwickle eine gesunde Skepsis gegenüber dem Wort "eigentlich". Hier (wo ich arbeite) haben wir einen Running Gag: "Das sollte eigentlich so unter CE laufen". Das betreffende Windowsprogramm war nur unter größten Schwierigkeiten nach CE portierbar. Wie sagt man so schön: Man hat schon Pferde vor der Apotheke ****en gesehen. Prüfe auch die unwahrscheinlichen Fehlerursachen, gerade wenn sie so einfach zu prüfen sind, wie hier. Und leg Wert auf gute Fehlerbehandlung. Ich weiß, dass das gerade bei VBS eher unhandlich ist, und "On Error Resume Next" ist ja auch sehr bequem. Aber wenn mal ein Problem auftritt, suchst du dich dumm und dämlich.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.