Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Denkanstoss - Memo und viele Zeichen (https://www.delphipraxis.net/87205-denkanstoss-memo-und-viele-zeichen.html)

turboPASCAL 25. Feb 2007 06:53


Denkanstoss - Memo und viele Zeichen
 
Hi,

ich werde noch Wuschig. Irgend wie komm ich ned drauf wie ich es am einfachsten
Anstelle viele Chars einzeln an ein Memo anhänge.
Meine Lösung ist viel zu langsam.

Delphi-Quellcode:
 l := 1;
  memo1.Text := memo1.Text + format('%6.6s', [#32]);
  for y := 0 to High(a) do
  begin

    ///
    memo1.Text := memo1.Text + format('$%0.2x,', [ a[y] ]); // <--<<<
    ///
    inc(l);


    if l > 20 then // länge der Formatierung
    begin
      memo1.Text := memo1.Text + #13#10;
      memo1.Text := memo1.Text + format('%6.6s', [#32]);
      l := 1;
    end;

    if y mod 100 = 0 then
    begin
      application.ProcessMessages;
      Caption := format('%d of %d',[High(a), y]);
    end;
  end;

  memo1.EndUpdate;

  s := Memo1.Lines[memo1.Lines.Count - 1];
  Delete(s, length(s), 1);
  Memo1.Lines[memo1.Lines.Count - 1] := s;
  memo1.Lines.Add(format('   ); // %d Bytes', [i]));
Die Menge der Zeichen kann bis zu 10 Mio betragen. Ein direktes schreiben ein eine Datei
möchte ich Vermeiden.

:gruebel:

Sharky 25. Feb 2007 07:06

Re: Denkanstoss - Memo und viele Zeichen
 
Hai turboPASCAL,

eine direkte Lösung habe ich um diese Uhrzeit nicht ;-)

Aber Du solltest in jedem Fall vermeiden unnötig oft auf das Property Text zugreifen zu müssen. Dies wird bei jedem Zugriff neu zusammen gebaut wenn ich das noch richtig im Kopf habe.
Arbeite also lieber mit einer lokalen Variablen und weise deren Inhalt erst am Ende deiner Funktion dem Property Text zu.

turboPASCAL 25. Feb 2007 07:20

Re: Denkanstoss - Memo und viele Zeichen
 
Zitat:

Zitat von Sharky
eine direkte Lösung habe ich um diese Uhrzeit nicht ;-)

:mrgreen: Naja, heute Nachmittag hätt ich dann bestimmt eine.

Zitat:

Zitat von Sharky
Aber Du solltest in jedem Fall vermeiden unnötig oft auf das Property Text zugreifen zu müssen.

Desswegen frag ich doch. :P


Ja ne, ist klar. ich hab es schon mit einem String versucht, derzeit guck ich mal ob es mit enem Memorystream besser bzw. schneller klappt.

RWarnecke 25. Feb 2007 07:24

Re: Denkanstoss - Memo und viele Zeichen
 
Ich würde diesen Teil:
Delphi-Quellcode:
    ///
    memo1.Text := memo1.Text + format('$%0.2x,', [ a[y] ]); // <--<<<
    ///
    inc(l);
vielleicht so ändern :
Delphi-Quellcode:
    ///
    memo1.lines.append(format('$%0.2x,', [ a[y] ]));
    ///
    inc(l);

turboPASCAL 25. Feb 2007 07:40

Re: Denkanstoss - Memo und viele Zeichen
 
Lines.Append(); ist fasst das gleiche wie Lines.Add();. Ausserdem wird jeweils eine
neue Zeile erstellt wass ich nicht möchte.

Die Formatierung soll/wird dann so aussehen:
Delphi-Quellcode:
// Include Datei: "RGB_8BIT_TESTBMP.INC"
// Konvertiert von Datei: TESTBMP.BMP

const
  RGB_8Bit_TESTBMP_Width    =       12;
  RGB_8Bit_TESTBMP_Height   =       12;
  RGB_8Bit_TESTBMP_ByteCount =      144;

  // 12 x 12 Pixel

  RGB_8Bit_TESTBMP : array [0..RGB_8Bit_TESTBMP_ByteCount-1] of Byte =
    (
      $00,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$00,$FF,$FF,$00,$FF,
      $FF,$FF,$FF,$FF,$00,$FF,$FF,$FF,$00,$FF,$FF,$00,$FF,$FF,$00,$FF,
      // [...]
      $FF,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$FF,$FF,$00,$FF,$FF,
      $FF,$FF,$00,$FF,$FF,$00,$FF,$FF,$FF,$00,$00,$FF,$FF,$FF,$00,$FF,
      $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$F9,$FB,$FA,
      $FF,$07,$F8,$00,$00
    ); // 144 Bytes
;)

SirTwist 25. Feb 2007 08:48

Re: Denkanstoss - Memo und viele Zeichen
 
ungetestet, einfach nur hier so reingetippert:
Delphi-Quellcode:
var s: String;
    y, l: Integer;
begin
  Memo1.BeginUpdate;
  l := 0; s := StringOfChar(32, 6);
  for y:=Low(a) to High(a) do begin
    s := s + Format('$%0.2x', [a[y]]);
    Inc(l);
    if (l >= 20) or (y = High(a)) then begin
      Memo1.Lines.Add(s);
      l := 0; s := StringOfChar(32, 6);
    end if;
  end;
  Memo1.EndUpdate;
end;

turboPASCAL 25. Feb 2007 09:42

Re: Denkanstoss - Memo und viele Zeichen
 
:gruebel: Stimmt, danke. Warum ist mir das nicht eingefallen ?

DP-Maintenance 25. Feb 2007 11:31

DP-Maintenance
 
Dieses Thema wurde von "MrSpock" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi Frage.

Hawkeye219 25. Feb 2007 12:21

Re: Denkanstoss - Memo und viele Zeichen
 
Hallo Matti,

du kannst die benötigte Zeit drastisch reduzieren, indem du mit einer temporären Stringliste arbeitest und deren Inhalt anschließend als Text in das Memo einfügst.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz