Seite 1 von 1

Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Di, 05. Mai 2015 11:21
von Hippo
Hallo zusammen,
ich hoffe wieder einmal auf die geballte Kompetenz des Forums bei einem Problem, das mich schon lange umtreibt:
Ich lese mit fread() aus einer großenTextdatei (Datanorm) Sätze in eine Datenbank ein. Das dauert machmal bis zu 15 min ohne Aktivität im Fenster
Deshalb möchte ich den gerade eingelesenen Satz jeweils kurz in einem Fenster anzeigen,möglichst im gleichen Fenster um Flittering zu vermeiden.
msg1= " "
do while .not. fileende
// Verarbeitung des eingelesenen Satzes
@ 3,5 DCSAY {||msg1}
// ?? hier liegt mein Problem: weiter im Programm ohne Eingabe von Hand
// Einlesen nächster Satz mir fread()
enddo
Gibt es da überhaupt eine Lösung ?
Danke schon mal für euren Hirnschmalz.

Peter

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Di, 05. Mai 2015 11:45
von Koverhage

Code: Alles auswählen

oScrn := XbpStatic():new(,, { aBeginn[1], aBeginn[2]+40}, { aGroesse[1],60},, YES)
oScrn:caption := "Verarbeitung DATANORM"
oScrn:options := XBPSTATIC_TEXT_CENTER + XBPSTATIC_TEXT_WORDBREAK
oScrn:create()
oScrn:setColorBG(XBPSYSCLR_DIALOGBACKGROUND)
oScrn:setColorFg(GRA_CLR_BLACK)
oScrn:setFontCompoundName( "8.Arial" )
oScrn:show()
do while .not. fileende
   // Verarbeitung des eingelesenen Satzes
   oScrn:SetCaption( msg1 )
   // ?? hier liegt mein Problem: weiter im Programm ohne Eingabe von Hand
   // Einlesen nächster Satz mir fread()
enddo 

oScrn:destroy()

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Di, 05. Mai 2015 12:28
von AUGE_OHR
Hippo hat geschrieben:Ich lese mit fread() aus einer großenTextdatei (Datanorm) Sätze in eine Datenbank ein. Das dauert machmal bis zu 15 min ohne Aktivität im Fenster
hm ... ich benötige keine 15 Sekunden(!) zum "einlesen" von 1GB CSV Dateien ... das "verarbeiten" dauert länger.
Hippo hat geschrieben:Deshalb möchte ich den gerade eingelesenen Satz jeweils kurz in einem Fenster anzeigen,möglichst im gleichen Fenster um Flittering zu vermeiden.
wie wäre ein Anzeige mit einem Progressbar ?

wichtig ist nur das du nicht zu oft eine Anzeige aufrufst da es viel Zeit kostet

Code: Alles auswählen

   IF (i % (nMax/100)) == 0
also nur je 1%

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Di, 05. Mai 2015 15:26
von Rudolf
Hallo,
ich mache es so:

Code: Alles auswählen

@ 0,0  DCSAY "" SAYSIZE 50 SAYOBJECT oMsg FONT "12.Arial bold"
...
DCGETOPTIONS NOMINBUTTON NOMAXBUTTON NORESIZE NOTITLEBAR WINDOWWIDTH 100
DCREAD GUI FIT PARENT @oWaitDlg EXIT OPTIONS getoptions MODAL
...
do while ..
    oMSg:setcaption("test")

enddo

Grüße
Rudolf

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Di, 05. Mai 2015 17:28
von Hippo
Ich habe den Tipp von Klaus (und Rudolf) ausprobiert, es klappt einwandfrei, nur den Parameter YES konnte ich nicht zuordnen, ich habe ich auch nicht in der XBASE++ - Reverenz zuordnen könne, aber es läuft auch gut ohne diesen Parameter. Der Vorschlag von Jimmy hat auch Charme, ich benutze DCPROGESS für die Prozentanzeige, aber halt nur 2% - Stufen, das ist für die Satzanzeige etwas wenig. Das Einlesen dauert deshalb so lange, weil ich jeden Satz gleich verarbeite.
Danke euch allen.

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Mi, 06. Mai 2015 7:31
von Koverhage
Steht doch in der Doku

<lVisible>

Mit dem Parameter <lVisible> wird bestimmt, ob ein XbpStatic-Objekt nach Aufruf der Methode :create() sichtbar ist, oder nicht. Standardmäßig ist <lVisible> .T. (wahr), d.h. ein XbpStatic-Objekt wird nach der Ausführung von :create() angezeigt und ist sichtbar. Dieses Standardverhalten kann unterdrückt werden, wenn für <lVisible> der Wert .F. (falsch) angegeben wird. In diesem Fall muß ein XbpStatic-Objekt explizit durch die Methode :show() angezeigt werden.

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Mi, 06. Mai 2015 8:10
von Wolfgang Ciriack
Hallo Klaus,
dann musst du noch dazuschreiben, dass du YES als .T. defined hast.

Re: Anzeige eingelesener Text innerhalb einer Schleife

Verfasst: Mi, 06. Mai 2015 8:38
von Koverhage
Hallo Wolfgang,

ich nicht, sondern Alaska in der COMMON.CH , welche bei mir in jeder PRG eingebunden wird.