Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String mit Hilfe einer Schleife zerteilen und auslesen (https://www.delphipraxis.net/96765-string-mit-hilfe-einer-schleife-zerteilen-und-auslesen.html)

cRayZo 25. Aug 2007 10:56

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
der Quelltext ist noch immer der selbe wie hier wobei der zweite code Probleme bereitet (der erste funktioniert)

ich habe das mit dem pos rückgängig gemacht, weil es mir im mom zu aufwändig ist, exakt jeden buchstaben in der richtigen reihenfolge in einen string zu schreiben, weil vorher buchstaben vertauscht wurden etc. aber diese lange if then else-tabelle kann der Fehler ja nicht sein..
mfg cRayZo

Klaus01 25. Aug 2007 15:56

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
Zitat:

Zitat von cRayZo
der Quelltext ist noch immer der selbe wie hier wobei der zweite code Probleme bereitet (der erste funktioniert)

ich habe das mit dem pos rückgängig gemacht, weil es mir im mom zu aufwändig ist, exakt jeden buchstaben in der richtigen reihenfolge in einen string zu schreiben, weil vorher buchstaben vertauscht wurden etc. aber diese lange if then else-tabelle kann der Fehler ja nicht sein..
mfg cRayZo

Da Du nicht schreibst welches Problem Dir der zweite Code bereitet eine kleine Vermutung:

Delphi-Quellcode:
buffer:=trunc((Zahl2 - Zahl1)/ Zahl3);
Bis Du dir sicher, dass buffer immer eine eindeutige Zahl zugewiesen bekommt.
Denn es ist nicht sichergestellt, das (Zahl2 - Zah11)/Zahl3 immer ein eindeutiges Ergebnis liefert.
z.B.

105 - 93 = 12 / 4 = 3 -> trunc -> 3
und auch
417 - 365 = 52 / 15 = 3,... -> trunc -> 3

Grüße
Klaus

Hawkeye219 25. Aug 2007 17:39

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
Hallo cRayZo,

Zitat:

Ich habde den Fehler mal im COde abgefangen.
Es stimmt, du hast einen Fehler abgefangen. Leider ist es einer, den du erst durch die Fehlerbehandlung eingebaut hast. Wenn man den Quelltext etwas umformatiert, wird es deutlich:

Delphi-Quellcode:
for i := Low(numbers) to High(numbers) do
  try
    s.Add(IntToStr(numbers[i])); // Zugriff auf StringListe
    showmessage(s.Text);
    s.Free; // Freigabe der Stringliste
    Zahl1count:=0;
    Zahl2count:=1;
    Zahl3count:=2;
  except
    begin
      showmessage('Fehler im ersten Bereich');
      break;
    end;
  end;
Beim zweiten Durchlauf wird auf eine Stringliste zugegriffen, die im vorangegangenen Durchlauf freigegeben wurde.

Zitat:

ich habe das mit dem pos rückgängig gemacht, weil es mir im mom zu aufwändig ist, exakt jeden buchstaben in der richtigen reihenfolge in einen string zu schreiben, weil vorher buchstaben vertauscht wurden etc.
Hast du vielleicht versehentlich die Korrektur des Schleifenendwertes (Beitrag #17) ebenfalls rückgängig gemacht?

Zitat:

aber diese lange if then else-tabelle kann der Fehler ja nicht sein..
Möglich, aber sie ist unübersichtlich und somit ein ideales Versteck für weitere Fehler. Bei jeder Änderung deiner Codetabelle mußt du zwei dieser Ungetüme synchronisieren. Das wäre mir auf Dauer zuviel Aufwand...

Gruß Hawkeye

marabu 25. Aug 2007 19:39

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
Hallo cRayZo,

immer wenn ich in diesem Thread das Wort Gleitkommafehler lese, dann frage ich mich, warum du überhaupt mit der Gleitkomma-Division arbeitest, schließlich ist deine ganze Ver- und Entschlüsselung doch ein reiner Ganzzahl-Algorithmus. Hier bekommst du noch eine Funktion Decode(), die den Ansatz von Hawkeye demonstriert. An der Funktion Encode() kannst du dich mal versuchen.

Delphi-Quellcode:
uses
  Types; // TIntegerDynArray

const
  Alphabet
    = 'abcdefghijklmnopq<rstuvwxyz!"§$%&/()=?*+#-'
    + '_:.,; ABCDEFGHIJKLMNOPQ>RSTUVWXYZ'
    ;
  Chiffre
    = '0;207:3|8;108:20|2;1342:67|3;339:16|3;2019:42|0;2397:47|'
    + '0;1260:84|0;116:29|9;189:36|7;1543:32|6;5802:84|7;1597:3'
    + '0|1;2177:32|4;1660:24|8;1304:27|4;718:14|8;1772:28|7;505'
    + '1:97|4;4668:88|'
    ;

{$I Proc.ExtractNumbers.pas}

function Decode(ida: TIntegerDynArray): string;
var
  i, n: Integer;
begin
  SetLength(Result, Length(ida) div 3);
  for i := 1 to Length(Result) do
  begin
    n := Pred(i) * 3;
    Result[i] := Alphabet[(ida[n + 1] - ida[n]) div ida[n + 2]];
  end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  ida: TIntegerDynArray;
begin
  ExtractNumbers(Chiffre, ida);
  ShowMessage(Decode(ida));
end;
Freundliche Grüße

cRayZo 26. Aug 2007 21:56

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
hm also ich hab das Problem gefunden.

danke an Klaus01.

Ja ICH war mir sicher dass immer ein exakter wert heraus kommt, aber mein pc scheinbar nicht. Ich habe den code

buffer:=trunc((Zahl2 - Zahl1)/ Zahl3);

einfach vereinfacht, sodass keine division angewand werden muss.
läuft einwandfrei thx :)


(edit: endlich :lol: )

cRayZo 27. Aug 2007 13:21

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
Zitat:

Zitat von Hawkeye219
Zu deiner "Konvertierungstabelle":
Wäre es nicht viell einfacher und übersichtlicher, den Zeichenvorrat in einen String zu packen? Dann kannst du mit der Funktion Pos nach einem Zeichen suchen und erhältst dessen Position im String oder den Wert 0, falls das gesuchte Zeichen nicht im String enthalten ist.

Dazu hab ich noch eine Frage. Ich habs (meiner Meinung nach) genauso gemacht, wie in der Hilfe, aber Delphi sagt ich hätte nicht genügend parameter. Versteh ich nicht, weil in der Klammer doch eig. nur 2 strings stehen müssen..

Delphi-Quellcode:
buffer2:=Pos(buffer; konvert);

buffer{buchstabe}, konvert{Text in dem gesucht werden soll}: string;
buffer 2: integer;
<-- was fehlt da?

mfg cRayZo

Klaus01 27. Aug 2007 13:29

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
Delphi-Quellcode:
buffer2:=Pos(buffer; konvert);
da sollte ein Komma und nicht ein Semikolon stehen.


In etwa so:
Delphi-Quellcode:
buffer2:=Pos(buffer,konvert);
Grüße
Klaus

cRayZo 27. Aug 2007 16:30

Re: String mit Hilfe einer Schleife zerteilen und auslesen
 
:oops:
:P
okay danke, *peinlichguck*


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Seite 3 von 3     123   

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