Laden grosser Texte in einer TextArea braucht sehr lange...

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

morszeck

Betreff: Laden grosser Texte in einer TextArea braucht sehr lange...

BeitragSa, Jun 26, 2004 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe ein paar Texte die ich nur darstellen will. Aber wen ich Dateien um die 800kb lade braucht dies eine Ewigkeit...

Zuerst habe ich Byte für Byte in die TextArea geschrieben und danach mal Zeilenweise versucht darzustellen (100 Zeichen pro Zeile). Aber es braucht einfach zu lange.

Andere Editoren laden den Quellcode oder Text im nu und man kann sofort loslegen. Gibts in B+ auch ein Trick um die Sache zu beschleunigen?

Code: [AUSKLAPPEN]
Function file_ta_read()

   Local fill_byte  = 46 ; .
   Local count      = 0
   Local line_len   = 100
   Local line_text$ = ""
   
   SetGadgetText(ta_read, "")
   LockTextArea(ta_read)

   While Not Eof(file_read)
   
      byte = ReadByte(file_read)

      If byte < 32 Then byte = fill_byte
      
      count = count + 1
      
      line_text$ = line_text$ + Chr$(byte)
      
      If Not(count Mod line_len) Then
         ;AddTextAreaText(ta_read, line_text$ + Chr$(13)+Chr$(10))
         ;line_text$ = ""
         line_text$ = line_text$ + Chr$(13)+Chr$(10)
         SetStatusText(win, "Load, please wait...  " + count +" / "+ file_size)
      EndIf
      
      
      If count > 20000 Then Exit
      
   Wend
   
   AddTextAreaText(ta_read, line_text$)
   
   UnlockTextArea(ta_read)
   
   
End Function
WinXpProf&SP2, B3D V1.88, B+ V1.40, BMax101Beta, AMD TB1.4GHz, DDR266/768MB, GeForce3@64MB
 

morszeck

BeitragSa, Jun 26, 2004 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
habe es mit

t$ = ReadString$(file_read)

DebugLog Len(t$)

probiert, aber dann stürzt das Programm immer ab...?!
WinXpProf&SP2, B3D V1.88, B+ V1.40, BMax101Beta, AMD TB1.4GHz, DDR266/768MB, GeForce3@64MB
 

Edlothiol

BeitragSa, Jun 26, 2004 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei ReadString muss am Anfang die Länge des Strings in einem Integer stehen. Wahrscheinlich ist das ganze wegen ReadByte so langsam, versuch doch mal alles per ReadBytes in eine Bank zu lesen und die dann in den String zu kopieren.
Code: [AUSKLAPPEN]
Function file_ta_read()

   Local fill_byte  = 46 ; .
   Local count      = 0
   Local line_len   = 100
   Local line_text$ = ""
   Local textbank = CreateBank(FileSize(NameDerTextDatei$))
   ReadBytes textbank, file_read, 0, BankSize(textbank)
   
   SetGadgetText(ta_read, "")
   LockTextArea(ta_read)

   For i = 0 To BankSize(textbank) - 1
   
      byte = PeekByte(textbank,i)

      If byte < 32 Then byte = fill_byte
     
      count = count + 1
     
      line_text$ = line_text$ + Chr$(byte)
     
      If Not(count Mod line_len) Then
         ;AddTextAreaText(ta_read, line_text$ + Chr$(13)+Chr$(10))
         ;line_text$ = ""
         line_text$ = line_text$ + Chr$(13)+Chr$(10)
         SetStatusText(win, "Load, please wait...  " + count +" / "+ file_size)
      EndIf
     
     
      If count > 20000 Then Exit
     
   Next
   
   AddTextAreaText(ta_read, line_text$)
   
   UnlockTextArea(ta_read)
   
   FreeBank textbank
   
End Function
 

morszeck

BeitragSa, Jun 26, 2004 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
He super, es ist bedeutend schneller, aber was mache ich mit Files an die 10MB ??

Muss eben den Text noch vorher formatieren, weil es ist kein einfaches txt File sondern ein cryptischer Text Smile
WinXpProf&SP2, B3D V1.88, B+ V1.40, BMax101Beta, AMD TB1.4GHz, DDR266/768MB, GeForce3@64MB

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group