Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei Sortierung Komma zeichen ignorieren (https://www.delphipraxis.net/201913-bei-sortierung-komma-zeichen-ignorieren.html)

DelphiDustin 10. Sep 2019 09:32

Bei Sortierung Komma zeichen ignorieren
 
Hi ich bin ziemlich neu bei Delphi und habe die Aufgabe bekommen Zahlen zu sortieren diese soll der Anwender mit einem Komma getrennt in ein edit feld schreiben z.B 5, 32, 2, 86 und später in einer Listbox ausgegeben werden. Wie bekomme ich es hin dass das Programm die einzelnen Zahlen erkennt und die Kommas so zu sagen ignoriert?

mkinzler 10. Sep 2019 10:07

AW: Bei Sortierung Komma zeichen ignorieren
 
Nur indem man seine eigene Sortierungsfunktion (bzw. Comparer) verwendet. Was soll den sortiert werden? (StringListe?)

Der schöne Günther 10. Sep 2019 10:20

AW: Bei Sortierung Komma zeichen ignorieren
 
Kannst du vielleicht einmal darlegen was du schon hast? Bekommst du es hin eine einzelne Zahl in einem Edit-Feld überhaupt zu erkennen? Also z.B. zwei Edit-Felder, in beide muss eine Zahl eingetragen werden und dein Programm sagt welche Zahl größer ist? Bekommst du das hin? Hast du überhaupt Erfahrung in Software-Entwicklung oder fängst du bei absolut Null an?

Schokohase 10. Sep 2019 10:26

AW: Bei Sortierung Komma zeichen ignorieren
 
Da du die Delphi-Version nicht angegeben hast, gehe ich mal von der neuesten (Rio 10.3.2) aus.

Delphi-Quellcode:
uses
  System.SysUtils,
  System.Generics.Collections;

procedure TForm1.SortButtonClick(Sender: TObject);
var
  input: string;
  splitted: TArray<string>;
  strItem: string;
  numbers: TArray<Integer>;
  numItem: Integer;
begin
  // Auslesen aus dem Edit
  input := InputEdit.Text;
  // Trennen am Komma
  splitted := input.Split([',']);
  // Umwandeln in (Ganz-)Zahlen
  numbers := [];
  for strItem in splitted do
  begin
    numbers := numbers + [Integer.Parse(strItem)];
  end;
  // Sortieren
  TArray.Sort<Integer>(numbers);
  // Ausgabe
  SortedNumberListBox.Items.BeginUpdate();
  try
    SortedNumberListBox.Items.Clear();
    for numItem in numbers do
      SortedNumberListBox.Items.Add(numItem.ToString());
  finally
    SortedNumberListBox.Items.EndUpdate();
  end;
end;

DelphiDustin 10. Sep 2019 10:40

AW: Bei Sortierung Komma zeichen ignorieren
 
@Der schöne Günther "Bekommst du es hin eine einzelne Zahl in einem Edit-Feld überhaupt zu erkennen?" Nein das bekomme ich nicht hin. "Also z.B. zwei Edit-Felder, in beide muss eine Zahl eingetragen werden und dein Programm sagt welche Zahl größer ist?" Das würde ich vlt hinbekommen aber es soll hat nur in einem edit feld stehen."Hast du überhaupt Erfahrung in Software-Entwicklung oder fängst du bei absolut Null an? " Ich kenne mich mit Visual Basic ganz ok aus und arbeite erst seit gestern mit Delphi also kenne ich da wirklich nur absolute Grundlagen.

Klaus01 10. Sep 2019 10:45

AW: Bei Sortierung Komma zeichen ignorieren
 
..sollte es nicht auch so funktionieren:

Delphi-Quellcode:
sl := TStringList.create;
sl.delimiter := ',';
sl.delimtedText := edit1.Text;
sl.sorted := true;
ungetestet

Grüße
Klaus

Der schöne Günther 10. Sep 2019 11:02

AW: Bei Sortierung Komma zeichen ignorieren
 
Zitat:

Zitat von DelphiDustin (Beitrag 1445488)
Das würde ich vlt hinbekommen aber es soll hat nur in einem edit feld stehen.

Wäre doch trotzdem schon einmal besser als nichts, oder? Weil da hättest du dich zwangsläufig schon einmal damit befassen müssen wie man den Inhalt des Edit-Felds (String) in eine Zahl umwandelt. Also das was dir der nette Schokohase schon fertig in seinem Quelltext-Schnippsel zeigt ;-)

Luckie 10. Sep 2019 15:24

AW: Bei Sortierung Komma zeichen ignorieren
 
Ich würde die Kommata mit dem folgendem Leerzeichen durch einen Zeilenumnruch #13#10 ersetzen, das Ergebnis in eine Stringlist packen und diese mit Bubblesort numerisch sortieren.

Uwe Raabe 10. Sep 2019 15:37

AW: Bei Sortierung Komma zeichen ignorieren
 
Mit einem halbwegs aktuellen Delphi kann man auch recht einfach Zahlen in einer Stringlist sortieren:
Delphi-Quellcode:
uses
  System.SysUtils,
  System.Classes;

function NumberCompareStrings(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := string.Compare(List[Index1], List[Index2], [coDigitAsNumbers]);
end;

procedure Main;
var
  lst: TStringList;
  I: Integer;
begin
  lst := TStringList.Create;
  try
    lst.CommaText := '5, 32, 2, 86';
    lst.CustomSort(NumberCompareStrings);
    Writeln(lst.CommaText); // => 2,5,32,86
  finally
    lst.Free;
  end;
end;

Luckie 10. Sep 2019 15:59

AW: Bei Sortierung Komma zeichen ignorieren
 
Er nun wieder. :mrgreen:

Aber wie und wo bekommt deine Sortierfunktion die Parameter übergeben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr.
Seite 1 von 2  1 2   

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