Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SynEdit Zählproblem (https://www.delphipraxis.net/70237-synedit-zaehlproblem.html)

gauggi 27. Mai 2006 13:10


SynEdit Zählproblem
 
Hallo!
Ich möchte in einem SynEdit die Zeichen zählen. Ich habe diese Funktion geschrieben, aber es werden immer zwei Zeichen mehr als vorhanden gezählt. Woran könnte das liegen??

Delphi-Quellcode:
var s: string;
z: integer;
begin
s:= synedit1.text;
z:= Length(s);
ShowMessage('Das aktuelle Dokument hat ' + IntTostr(z) + ' Zeichen');
Danke für jede Hilfe :-D

MrKnogge 27. Mai 2006 13:14

Re: SynEdit Zählproblem
 
Der Code müsste gehen.

Hast du eventuell beim "manuellen" zählen die Leerzeichen vergessen ?

gauggi 27. Mai 2006 13:16

Re: SynEdit Zählproblem
 
Zitat:

Zitat von MrKnogge
Der Code müsste gehen.

Hast du eventuell beim "manuellen" zählen die Leerzeichen vergessen ?

Das habe ich auch versucht. Aber es werden immer zwei Zeichen mehr angezeigt als da sind. Könnte dies an irgendeiner Einstellung in Syn Edit liegen??

mfg gauggi

Helmi 27. Mai 2006 13:18

Re: SynEdit Zählproblem
 
Zeig doch mal nen Ausschnitt des Textes den du zählen willst.

Wenn da ein ein Absatz oder so drin ist, dann zählst du #10#13 mit

CalganX 27. Mai 2006 13:19

Re: SynEdit Zählproblem
 
Hi,
das Zeichen für eine neue Zeile besteht aus zwei Zeichen: chr(13) und chr(10) (\r\n, #13#10, nenn's wie du wilst).
Selbst wenn du nur eine Zeile hast, wird am Ende eine weitere Zeile hinzukommen, die SynEdit afaik immer hinzufügt.

Chris

gauggi 27. Mai 2006 13:20

Re: SynEdit Zählproblem
 
Zitat:

Zitat von Chakotay1308
Hi,
das Zeichen für eine neue Zeile besteht aus zwei Zeichen: chr(13) und chr(10) (\r\n, #13#10, nenn's wie du wilst).
Selbst wenn du nur eine Zeile hast, wird am Ende eine weitere Zeile hinzukommen, die SynEdit afaik immer hinzufügt.

Chris

Hallo!

Wie kann ich es programmieren, dass der Zeilenumbruch nicht gezählt wird.

Danke!

//edit: Mir ist aufgefallen, dass auch alle Leerzeichen gezählt werden. Wie kann ich das unterbinden.

CalganX 27. Mai 2006 13:23

Re: SynEdit Zählproblem
 
Hi,
ich würde einfach Delphi-Referenz durchsuchenStringReplace verwenden, um in einem temporären String die Zeilenumbrüche zu löschen.

Chris

gauggi 27. Mai 2006 13:29

Re: SynEdit Zählproblem
 
Zitat:

Zitat von Chakotay1308
Hi,
ich würde einfach Delphi-Referenz durchsuchenStringReplace verwenden, um in einem temporären String die Zeilenumbrüche zu löschen.

Chris

Hallo!

Wie kann ich StringReplace verwenden?

mfg gauggi

CalganX 27. Mai 2006 13:30

Re: SynEdit Zählproblem
 
Zitat:

Zitat von gauggi
Wie kann ich StringReplace verwenden?

Was meinst du? Warum habe ich den [oh]-Tag verwendet? :roll:

Chris

Hawkeye219 27. Mai 2006 13:55

Re: SynEdit Zählproblem
 
Zitat:

Zitat von Chakotay1308
ich würde einfach Delphi-Referenz durchsuchenStringReplace verwenden, um in einem temporären String die Zeilenumbrüche zu löschen.

Warum? Wenn Length(Edit.Text) die Länge des Textes liefert und Edit.Lines.Count die Anzahl der Textzeilen, dann sollte das ganze doch mit Hilfe einfacher Ganzzahlarithmetik zu lösen sein.

Gruß Hawkeye

gauggi 27. Mai 2006 14:00

Re: SynEdit Zählproblem
 
Zitat:

Zitat von Hawkeye219
Zitat:

Zitat von Chakotay1308
ich würde einfach Delphi-Referenz durchsuchenStringReplace verwenden, um in einem temporären String die Zeilenumbrüche zu löschen.

Warum? Wenn Length(Edit.Text) die Länge des Textes liefert und Edit.Lines.Count die Anzahl der Textzeilen, dann sollte das ganze doch mit Hilfe einfacher Ganzzahlarithmetik zu lösen sein.

Gruß Hawkeye

Hallo!

Wie kann ich das mit Ganzzahlarithmetik lösen??

mfg gauggi

Hawkeye219 27. Mai 2006 14:13

Re: SynEdit Zählproblem
 
Ok, du kennst die Länge des Textes und die Anzahl der Zeilen. Zudem weißt du, daß für jede Zeile ein Zeilenwechsel (#13#10) mitgezählt wird, der dich aber nicht interessiert. Christopher hat dann noch bemerkt, daß die SynEdit-Komponente möglicherweise einen Zeilenwechsel zusätzlich einfügt.

Daraus sollte sich doch eine einfache Formel ableiten lassen, oder?

Gruß Hawkeye

bigg 27. Mai 2006 15:31

Re: SynEdit Zählproblem
 
Wenn man die Gesamtlänge aller Zeilen und Zeichen zählen möchte, braucht man nur das Zeilenumbruchformat kennen. Synedit besitzt momentan 3 Umbruchformate (Windows, Unix, Mac). Mod's von Synedit unterstützen noch weitere Formate.

Diese Funktion wurde für die ANSI-Variante geschrieben:

Delphi-Quellcode:
function GetSpaceLength(const Editor: TSynEdit): Integer;
var i, Lines: Integer; var f: Byte;
begin
  Result := 0;

  if Editor <> nil then
  begin
    Lines := Editor.Lines.Count;

    if TSynEditStringList(Editor.Lines).FileFormat = sffDos then
    f := 2 else f := 1; // DOS bricht mit 2 Zeichen um, MAC und UNIX jeweils mit einem Zeichen

    Result := (Lines * f); // Zeichen für die Zeilenumbrüche errechnen

    if Lines <> 0 then // bei nur einer Zeile
    dec(Result, f); 2 bzw. 1 Byte abziehen

    for i := 0 to Lines -1 do // Alle Zeichen alle Zeilen zählen
    inc(Result, Length(Editor.Lines[i]));
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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