AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Alle anderen Zeichen außer a-z entfernen!
Thema durchsuchen
Ansicht
Themen-Optionen

Alle anderen Zeichen außer a-z entfernen!

Ein Thema von Kidix · begonnen am 4. Okt 2005 · letzter Beitrag vom 7. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Kidix

Registriert seit: 14. Jan 2005
315 Beiträge
 
Delphi 4 Standard
 
#1

Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:08
Hi,

ich habe einen String der in etwa so aussehen kann

Zitat:
screenshot$%&$%&||
Jetzt möchte ich, dass nur zeichen des Alphab. im strig stehen bleiben dürfen.
Wie mache ich das am besten?
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:10


Sieht der String immer in der Form aus? Also fängt er mit dem relevanten Teil an oder kann der relevante Teil auch mitten in lustigen Zeichen stehen?
mfg zecke
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:11
Mal so aus dem Blauen heraus:
Delphi-Quellcode:
function StripToLetters(const InStr: string): string;
var
  I, Cnt: Integer;
begin
  SetLength(Result, Length(InStr));
  Cnt := 0;
  for I := 1 to Length(InStr) do
  begin
    if InStr[I] in ['A'..'Z', 'a'..'z'] then
    begin
      Inc(Cnt);
      Result[Cnt] := InStr[I];
    end;
  end;
  SetLength(Result, Cnt);
end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#4

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:31
Zitat von sakura:
Mal so aus dem Blauen heraus:
Delphi-Quellcode:
function StripToLetters(const InStr: string): string;
var
  I, Cnt: Integer;
begin
  SetLength(Result, Length(InStr));
  Cnt := 0;
  for I := 1 to Length(InStr) do
  begin
    if InStr[I] in ['A'..'Z', 'a'..'z'] then
    begin
      Inc(Cnt);
      Result[Cnt] := InStr[I];
    end;
  end;
  SetLength(Result, Cnt);
end;
Warum machst du das so kompliziert? Gibts irgend n Grund mit SetLength zu arbeiten?

Ich würde das einfach so machen:
Delphi-Quellcode:
function StripToLetters(const InStr: string): string;
var
  i: Integer;
begin
  for i := 1 to Length(InStr) do
  begin
    if InStr[i] in ['A'..'Z', 'a'..'z'] then
    begin
      Result := Result + InStr[i];
    end;
  end;
end;
Welchen Vorteil hätte nun deine Methode?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:33
Zitat von r2c2:
Welchen Vorteil hätte nun deine Methode?
Mache mal einen Performancetest. Entweder ein 2 MB String oder einfach einen relativ kurzen nehmen und den 10000 mal bearbeiten lassen. Dann wirst Du es merken

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#6

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:47
Zitat von sakura:
Zitat von r2c2:
Welchen Vorteil hätte nun deine Methode?
Mache mal einen Performancetest. Entweder ein 2 MB String oder einfach einen relativ kurzen nehmen und den 10000 mal bearbeiten lassen. Dann wirst Du es merken
Gut, werd ich machen. Sowas interessiert. Ich nehme mal an, das hängt damit zusammen, dass n string n dynamischer Array is und, dass + InStr[i] immer wieder implizit SetLength benutzt. Is das so?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 13:50
Zitat von r2c2:
Gut, werd ich machen. Sowas interessiert. Ich nehme mal an, das hängt damit zusammen, dass n string n dynamischer Array is und, dass + InStr[i] immer wieder implizit SetLength benutzt. Is das so?
So oder sehr ähnlich, ja Durch das stete Verlängern des Strings wird immer wieder ein neuer Speicherbereich alloziert und die Daten kopiert

Bei kleinen Datenmengen ist es gehupft wie gesprungen, aber bei großen...

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 14:54
Hai ihr,

nur mal so als vergleichswert:

Delphi-Quellcode:
begin
  for ndx := 1 to 1000 do
  begin
    s := s + 'A';
  end;
end;

function StripToLetters(const InStr: string): string;
var
  I, Cnt: Integer;
begin
  SetLength(Result, Length(InStr));
  Cnt := 0;
  for I := 1 to Length(InStr) do
  begin
    if InStr[I] in ['A'..'Z', 'a'..'z'] then
    begin
      Inc(Cnt);
      Result[Cnt] := InStr[I];
    end;
  end;
  SetLength(Result, Cnt);
end;

function StripToLetters2(const InStr: string): string;
var
  i: Integer;
begin
  for i := 1 to Length(InStr) do
  begin
    if InStr[i] in ['A'..'Z', 'a'..'z'] then
    begin
      Result := Result + InStr[i];
    end;
  end;
end;

procedure TForm1.btn_Test1Click(Sender: TObject);
var
  start : Cardinal;
  ende : Cardinal;
  foo : string;
  ndx : integer;
begin
  start := GetTickCount;
  for ndx := 1 to 1000 do
    foo := StripToLetters(s);
  ende := GetTickCount;
  lbl_Label1.Caption := Format('Zeit %d',[ende-start]);

  start := GetTickCount;
  for ndx := 1 to 1000 do
    foo := StripToLetters2(s);
  ende := GetTickCount;
  lbl_Label2.Caption := Format('Zeit %d',[ende-start]);
end;
Bei Funktion1 : 1 ms
Bei Funktion2 : 2200 ms
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 15:00
Zitat von Sharky:
Bei Funktion1 : 1 ms
Bei Funktion2 : 2200 ms
Cool, gell Ändere mal den TestString-Generator zu
Delphi-Quellcode:
begin
  Randomize;
  for ndx := 1 to 1000 do
  begin
    s := s + Chr(Random(Ord('z')-32)+32);
  end;
end;
Damit ist der String etwas verteilter und das Ergebnis "ehrlicher".

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Alle anderen Zeichen außer a-z entfernen!

  Alt 4. Okt 2005, 20:15
Zitat von sakura:
...Damit ist der String etwas verteilter und das Ergebnis "ehrlicher". ...
Das interessiert mich jetzt aber:

Was ist es für ein Unterschied wie der String der Untersucht werden soll zusammengesetzt wurde?

BTW: In meinen Tests fehlt noch die Zeitmessung bei der Funktion von r2c2 wenn eine etxtra "foobar" Variable verwendet wird und deren Inhalt am Ende "an Result" übergeben wird.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  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 03:43 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