Seite 1 von 1

Der Rechner hängt sich immer auf - CPU Auslastung 100%

Verfasst: 24.02.2008 17:47
von HemSA
Hallole Ihr,
ich will aus einer Excel-Tabelle Werte einlesen und diese später in eine Textdatei schreiben.

Ich habe da den vorhandenen Code von Falko etwas umgeändert. Das Einlesen der Exceltabelle klappt auch gut. Nur beim Auslesen der Texttabelle hängt sich der Rechner auf - so das ich den jedesmal neu starten muss. Hat da einer eine Idee an was das liegen kann? Was habe ich da falsch gemacht - wo liegt denn da mein Denkfehler?

Der Code ist hier:

Code: Alles auswählen

;EnableExplicit

Define.l Pattern, ExcelAPP, Sheets, SheetN, n, AnfangX, AnfangY, EndeX, EndeY
Define.s StandardFile, sPattern, Datei, StandardFile, Text, endungs.s

#xlAscending = 1
#xlContinuous = 1
#xlCenter = -4108
#xlSolid=1
#xlContinuous=1
#xlThin=2
#xlNone=-4142
#xlWorksheet=-4167
#xlDouble = -4119
#xlDash = -4115
#xlDashDot = 4
#xlDashDotDot = 5
#xlDot = -4118
#xlDouble = -4119
#xlAutomatic = -4105
#xlLineStyleNone = -4142
#xlSlantDashDot = 13
#xlHairline = 1
#xlMedium = -4138
#xlThick = 4
#xlDiagonalDown = 5
#xlDiagonalUp = 6
#xlEdgeBottom = 9
#xlEdgeLeft = 7
#xlEdgeRight = 10
#xlEdgeTop = 8
#xlInsideHorizontal = 12
#xlInsideVertical = 11
#xlFormatFromLeftOrAbove = 0
#xlFormatFromRightOrBelow = 1
#xlToolbar = 1
#xlToolbarButton = 2
#xlToolbarProtectionNone = -4143
#xlTop = -4160
#xlTop10Items = 3
#xlTop10Percent = 5
#xlTopToBottom = 1
#xlToRight = -4161
#xlToLeft = -4159
#xlUp = -4162
#xlDown = -4121
#xlLightUp = 14


#xlPatternAutomatic = -4105
#xlPatternChecker = 9
#xlPatternCrissCross = 16
#xlPatternDown = -4121
#xlPatternGray16 = 17
#xlPatternGray25 = -4124
#xlPatternGray50 = -4125
#xlPatternGray75 = -4126
#xlPatternGray8 = 18
#xlPatternGrid = 15
#xlPatternHorizontal = -4128
#xlPatternLightDown = 13
#xlPatternLightHorizontal = 11
#xlPatternLightUp = 14
#xlPatternLightVertical = 12
#xlPatternLinearGradient = 4000
#xlPatternNone = -4142
#xlPatternRectangularGradient = 4001
#xlPatternSemiGray75 = 10
#xlPatternSolid = 1
#xlPatternUp = -4162
#xlPatternVertical = -4166

XIncludeFile "C:\Program Files\PureBasic - 4.02\PureBasic\Examples\DispHelper_Include\VariantHelper_Include.pb" ; write here your VariantHelper_include.pb - path

Procedure OpenExcelFile(Datei.s)
  Protected *obj
  dhToggleExceptions(#True); Toggles error messages from DispHelper on or off
  *obj  = dhCreateObject("Excel.Application")
  If *obj
    dhCallMethod(*obj, ".Workbooks.Open(%T)", @Datei) ; open ExcelFile
  EndIf
  ProcedureReturn *obj
EndProcedure

Procedure OpenExcelFileNext(*obj,Datei.s)
  ;dhToggleExceptions(#True); Toggles error messages from DispHelper on or off
  ;*obj  = dhCreateObject("Excel.Application")
  If *obj
    dhCallMethod(*obj, ".Workbooks.Open(%T)", @Datei) ; open ExcelFile
  EndIf
  ProcedureReturn *obj
EndProcedure


Procedure.s ReadCellS1(*obj, Zeile.l,Spalte.l)
  Protected ReturnValue.l, Resume.s
  dhGetValue("%T", @ReturnValue, *obj, "Cells(%d, %d).Value",Zeile, Spalte) ; read one value
  If ReturnValue
    Resume=PeekS(ReturnValue)
    dhFreeString(ReturnValue)
    ProcedureReturn Resume
  EndIf
EndProcedure


Procedure.s ReadCellS2(*obj, Zeile.l,Spalte.l)
  Protected ReturnValue.l, Resume.s
  dhGetValue("%T", @ReturnValue, *obj, "Cells(%d, %d).Value",Zeile, Spalte) ; read one value
  If ReturnValue
    Resume=PeekS(ReturnValue)
    dhFreeString(ReturnValue)
    ProcedureReturn Resume
  EndIf
EndProcedure

Procedure.s ReadCellS3(*obj, Zeile.l,Spalte.l)
  Protected ReturnValue.l, Resume.s
  dhGetValue("%T", @ReturnValue, *obj, "Cells(%d, %d).Value",Zeile, Spalte) ; read one value
  If ReturnValue
    Resume=PeekS(ReturnValue)
    dhFreeString(ReturnValue)
    ProcedureReturn Resume
  EndIf
EndProcedure




;--  Main Program
Define.l i
Define.s Name, wert1s, wert2s, wert3s,wert4s

StandardFile = ""
sPattern = "Text (*.xls)|*.xls|Alle Dateien (*.*)|*.*"
Pattern = 0
;Datei = OpenFileRequester("Bitte eine XLS-Datei auswählen", StandardFile, sPattern, Pattern)
Datei ="C:\Objekte\Purebasic - 4.0\Programme - PB4.0\Excel-WinTED\WinTED.xls"

dhToggleExceptions(#True); Toggles error messages from DispHelper on or off

ExcelApp=OpenExcelFile(Datei.s)

If ExcelApp
 

  wert1s=ReadCellS1(ExcelApp, 1, 2)
  wert2s=ReadCellS1(ExcelApp, 2, 2)
  wert3s=ReadCellS1(ExcelApp, 3, 2)
  wert4s=ReadCellS1(ExcelApp, 4, 2)
  
  MessageRequester("Read_Cells", wert1s)
  MessageRequester("Read_Cells", wert2s)
  MessageRequester("Read_Cells", wert3s)
  MessageRequester("Read_Cells", wert4s)
  

Else
   MessageRequester("PureDispHelper-ExcelDemo", "Couldn't create Excel-Object")
EndIf


If ReadFile(1,"C:\Objekte\Purebasic - 4.0\Programme - PB4.0\Excel-WinTED\GAS.TAB") 
    
    Delay(1000)
    
    While Eof(1) = 0           ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
     

       
       
                       
       zeilensatzs.s=ReadString(1) 
       gastabs.s=Left(zeilensatzs.s,10) 
       gastabwert1s.s=Mid(zeilensatzs.s,160, 5) 
       gastabwert2s.s=Mid(zeilensatzs.s,165, 5) 
       gastabwert3s.s=Mid(zeilensatzs.s,170, 5)
     
     
     
     If gastabs.s="6720180734"
     
     
     
     Debug gastabs.s
     Debug gastabwert1s
     Debug gastabwert2s
     Debug gastabwert3s
     
     
      
   ;MessageRequester("GASTAB-Wert", gastabs.s)
   ;MessageRequester("GASTAB-Wert", gastabwert1s.s)
   ;MessageRequester("GASTAB-Wert", gastabwert2s.s)
   ;MessageRequester("GASTAB-Wert", gastabwert3s.s)   
    
    
    
    EndIf
    
    
    
      CloseFile(1) 


 Debug ReadString(1)      ; Zeile für Zeile im Debugger-Fenster anzeigen
    Wend
 

Else
    MessageRequester("Information","Konnte Datei nicht öffnen!")
  EndIf




End

Re: Der Rechner hängt sich immer auf - CPU Auslastung 100%

Verfasst: 24.02.2008 17:50
von Kiffi
so auf den ersten Blick würde ich vermuten, dass das CloseFile(1) an der falschen Stelle ist.

Grüße ... Kiffi

Verfasst: 24.02.2008 17:50
von KeyKon
Wo genau hängt er sich denn auf (Also bei welcher Zeile)? Hast du das schon genauer untersucht?

Verfasst: 24.02.2008 18:04
von HemSA
Hallo Kiffi,
ja das war es wohl - habe es an eine andere Stelle getan und er hängt sich nicht mehr auf - 3 Stunden hänge ich schon davor :-(

KeyKon
das konnte ich leider nie nachvollziehen, weil mir nie keine andere Chance geblieben ist als den Rechner wieder neu zu starten - das dauert immer einige Minuten - deshalb die Verzweiflung.

Danke nochmal Kiffi.

Wenn ich noch Probleme habe melde ich mich nochmal.

Verfasst: 24.02.2008 19:11
von Kiffi
HemSA hat geschrieben:Wenn ich noch Probleme habe melde ich mich nochmal.
wenn ich mir den Code anschaue, dann wird das nächste Problem
nicht lange auf sich warten lassen ;-)

solange folgende Zeile im Code vorhanden ist:

Code: Alles auswählen

 Debug ReadString(1)      ; Zeile für Zeile im Debugger-Fenster anzeigen
wird Deine Routine nur jede 2te Datenzeile erfassen (sofern der Debugger angeschaltet ist).

besser ist es so:

Code: Alles auswählen

Debug zeilensatzs      ; Zeile für Zeile im Debugger-Fenster anzeigen
Grüße ... Kiffi