AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Seltsame Eigenheit von TMemo/TFileStream/string
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsame Eigenheit von TMemo/TFileStream/string

Ein Thema von BrainCode · begonnen am 27. Jan 2003 · letzter Beitrag vom 28. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BrainCode
BrainCode

Registriert seit: 18. Jan 2003
119 Beiträge
 
#1

Seltsame Eigenheit von TMemo/TFileStream/string

  Alt 27. Jan 2003, 19:00
Ich habe folgenden Code geschrieben, der auch problemlos jede Art von Datei einliest. Dabei gibt es bloß ein Problem: Wenn ich, anstatt buffer immer gleich an Memo1.Text anzuhängen, an eine String-Variable anhänge und diese später dem Memo zuweise, ergeben sich bei der Darstellung Unterschiede zur aktuellen Lösung. Kann mir das jemand erklären???

Code:
procedure TForm1.mnuOeffnenClick(Sender: TObject);
var
  datei: file;
  buffer: byte;
begin
  if opendialog1.Execute then begin
    memo1.Clear;
    assignfile(datei,opendialog1.FileName);
    reset(datei,1);
    while not eof(datei) do begin
      blockread(datei,buffer,1);
      if buffer = 0 then buffer := 32;
      memo1.Text := memo1.Text + chr(buffer);
    end;
    closefile(datei);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#2
  Alt 27. Jan 2003, 19:04
Hoi,
warum denn so umständlich ???
memo1.Lines.LoadFromFile(opendialog1.FileName);
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 27. Jan 2003, 22:18
Moin BrainCode,

mal abgesehen davon, dass Roman's Methode wohl sinnvoller ist:

Worin besteht denn der Unterschied, wenn Du statt Memo1.Text immer zu erweitern eine String Variable immer erweiterst, und diese dann Memo1.Text zuweist.

BTW:
Immmer einzelne Byte einzulesen und einem String zuzuweisen, ganz speziell Memo.Text, drückt ganz erheblich auf die Performance.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 27. Jan 2003, 22:40
Moin Christian,

Zitat von Christian Seehase:
ganz speziell Memo.Text, drückt ganz erheblich auf die Performance.
Das möchte ich Unterstreichen!
Habe es letzte Woche in der Arbeit erst wieder gemerkt.
Eine Software schreibt Daten auf die Serielle(mit nur 19kBaud), dabei wird in einer Memo angezeigt, was alles geschrieben worden ist. Das funktionierte unter NT ganz gut, nur auf ME überhaupt nicht. Die Datenübertragung hat überhaupt nicht geklappt, da Windows total überfordert war, gleichzetig was in der Memo zu schreiben. Ja ja, ME ist auch ein Multi-Threading System, dennoch bringt es nichts auf die Reihe. Das ist der kleine aber feine Unterschied zwischen 9xME und NT2k. Da liegen eindeutig Welten dazwischen. Achja, ProcessMessages bringt da auch nichts mehr.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von BrainCode
BrainCode

Registriert seit: 18. Jan 2003
119 Beiträge
 
#5
  Alt 28. Jan 2003, 14:42
Von der Theorie her ist mir klar, dass LoadFromFile einfacher ist und das es keinen Unterschied macht, ob ich direkt in das Memo schreibe oder ob ich erst per String puffere.

Zu LoadFromFile: Diese Funktion hört bei Binärdateien nach dem ersten Null-Zeichen ( chr(0) ) auf zu lesen.

Ich habe die Frage eigentlich nur gepostet, weil ich wissen wollte, WARUM es ein Unterschied ist, ob ich das Ganze in einem String puffere. Ich habe keine Ahnung warum, aber es ergibt sich ein Darstellungsunterschied.

Probiert den Code doch bitte mal bei euch mit einer EXE aus, bei mir hat es mit der ftp.exe aus dem Windows-Verzeichnis ganz gut geklappt. Ich benutze Win98 SE. Versucht dann mal, anstatt in Memo in einen zweiten Puffer zu schreiben (string) und diesen im Memo ausgeben zu lassen, nachdem der Lesevorgang beendet ist.
  Mit Zitat antworten Zitat
Benutzerbild von BrainCode
BrainCode

Registriert seit: 18. Jan 2003
119 Beiträge
 
#6
  Alt 28. Jan 2003, 14:45
Mir ist noch etwas eingefallen:
Das Schreiben in ein Memo wird bei mir wesentlich schneller, wenn ich die Scroll-Animationen von Windows ausschalte. Die meißte Zeit wird also von der Animation geschluckt.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 28. Jan 2003, 15:07
Zitat von BrainCode:
Die meißte Zeit wird also von der Animation geschluckt.
Das ist auch logisch. In der Zeit, in der der Monitor das Bild einmal gezeichnet hat, hast du zwanzig Mail die Entfernung Erde-Sonne berechnet. Und Animation ist eben Bildschirmdarstellung.

Das kann man ganz leicht ausprobieren, indem man eine Konsolenanwendung schreit, die einfach bis 1 Million hochzählt und dabei die aktuelle Zalh immer in eine neue Zeile schreibt. Das dauert schon etwas. Wenn man dagegen die Ausgabe in eine Datei umleitet, dauert der Vorgang gerade einmal ein paar Sekunden.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 28. Jan 2003, 16:51
Moin BrainCode,

Zitat:
Zu LoadFromFile: Diese Funktion hört bei Binärdateien nach dem ersten Null-Zeichen ( chr(0) ) auf zu lesen.
Man liest ja auch keine Nichttext Dateien in ein Memo ein

Was Du allerdings immer noch nicht erzählt hast:

Wo ist denn nun der Darstellungsunterschied?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von BrainCode
BrainCode

Registriert seit: 18. Jan 2003
119 Beiträge
 
#9
  Alt 28. Jan 2003, 19:26
Ich will auch Binärdaten ansehen können, weil ich Notepad nachprogrammieren und um einige Funktionen erweitern will. Der Code für's Einlesen ist jetzt auch erledigt.

Der Darstellungsunterschied ergab sich daraus, das auch bei Strings das Zeichen 0 als Ende-Zeichen interpretiert wird. Um es Notepad nachzumachen ersetze ich aber alle 0-Zeichen durch 31-Zeichen (Space), wodurch das Problem beseitigt wird. Nur Speichern kann man die Binaries dadurch nicht, aber das Problem hat ja Notepad auch, dafür gibt's ja Hex-Editoren.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 28. Jan 2003, 20:02
Moin Braincode,

falls es von Dir kein Schreibfehler war:
Space ist #32.

Das ist der Wert den Notepad auch für die #00 einsetzt, und Speichern kann man dann auch. Hat nur den kleinen Nachteil, dass die Datei danach zerstört ist, da ja alle #00 durch #32 ersetzt wurden.

Um das zu umgehen müsste man sich alle Positionen von #00 in der Datei merken und beim Speichern wieder zurücksetzen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz