Eratum Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 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* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-roTekuGeL- Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 schon debugged? was steht in dem HTML am ende drin? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 19. Juli 2006 Autor Teilen Geschrieben 19. Juli 2006 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ß).... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
k4fu Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 hab den eindruck da fehlt so ne art: movenext Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 19. Juli 2006 Autor Teilen Geschrieben 19. Juli 2006 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-roTekuGeL- Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eytibi Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 19. Juli 2006 Teilen Geschrieben 19. Juli 2006 "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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 19. Juli 2006 Autor Teilen Geschrieben 19. Juli 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 Bist du sicher, dass du uns den richtigen Code gezeigt hast? Der Code erzeugt Tabellenzeilen mit 6 <TD>-Tags. Deine Beispielausgabe hat nur 5. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eratum Geschrieben 20. Juli 2006 Autor Teilen Geschrieben 20. Juli 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. Juli 2006 Teilen Geschrieben 20. Juli 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.