AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Sortieren eines Arrays of String

Ein Thema von DonPedroFo · begonnen am 8. Jul 2019 · letzter Beitrag vom 23. Jul 2019
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
DonPedroFo

Registriert seit: 26. Jun 2019
14 Beiträge
 
#1

Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:18
Delphi-Version: 5
Hallo,
ich bin hier relativ neu, und hab eine Aufgabe bekommen bei der ich momentan auf dem Schlauch stehe.

Folgendes Szenario muss ich lösen.

Ich habe eine "Textdokument" mit mehreren (98) Zeilen.
Jede Zeile beinhaltet einen Code der früher oder später in ein Flashspeicher geschrieben wird.

Eine Zeile sieht beispielsweise so aus:
S10011223344556677889900AABBCCDDEEFF (natürlich nicht in dieser "perfekten" Reihenfolge)

Code:
Eine Zeile setzt sich wie folgt zusammen:
S1 / 00 / 1122 / ..... / FF
|    |    |     |Daten
|    |    |Adresse
|    |Anzahl der Bytes
|Startcode

In diesem Fall wäre die Hexzahl "1122" die Adresse im Flashsspeicher, in die Daten geschrieben werden.
Heißt die Daten "..." müssen an die Adresse "1122" geschrieben werden.

Jede Zeile hat eine andere Adresse mit unterschiedlichen Daten.

Um den Schreibvorgang im Flashspeicher zu beschleunigen muss ich bei der Adresse "0000" anfangen zu schreiben und bei der Adresse "FFFF" aufhören.

Die Zeile sind aber durcheinander was heißt ich muss erstmal die alle Zeile sortieren im Bezug auf die Adresse
z.b.
Vor dem Sortieren
Adresse Zeile 1: S1/00/ 3853 /.....
Adresse Zeile 2: S1/00/ F325 /.....
Adresse Zeiel 3: S1/00/ 1023 /.....

Nach dem sortieren:
Adresse Zeile 3: S1/00/ 1023 /.....
Adresse Zeile 1: S1/00/ 3853 /.....
Adresse Zeile 2: S1/00/ F325 /.....

Natürlich darf ich nicht nur die Adresse berücksichtigen sondern muss die ganze Zeile "mit sortieren"

Ich hab mir schon die Sortier-Algorithmen angeschaut bin aber auf keinen grünen zweig gekommen.

PS. Jede Zeile steht in einem: Array of String

Geändert von Luckie ( 8. Jul 2019 um 09:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.841 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:27
Ich würde mir eine entsprechende Klasse definieren, die Strings parsen und jede Instanz in eine TObjectList packen. Die kann man sortieren und anschließend von oben nach unten abarbeiten. Um Zahlen in hexadezimaler Darstellung zu sortieren musst Du sie erst in Zahlen umwandeln, das geht mit StrToInt('$' + hexadezimale Darstellung).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.295 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:40
Parsen und in ein Record packen. Dann kann man nach dem gewünschten Feld sortieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.214 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:42
Hallo,
das kannst Du doch mit einem normalem CustomSort hinbekommen.
Heiko
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
415 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:47
Liste parsen und die Adresse im Objects[] - Feld ablegen und danach nach diesem Feld sortieren.
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.093 Beiträge
 
Delphi 7 Professional
 
#6

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:47
Das geht mit 'ner TStringList.

Schau Dir bitte mal dashier an: https://www.delphipraxis.net/835874-post7.html

Du müsstest das dortige Beispiel für die Funktion MyCompare entsprechend Deinen Anforderungen anpassen.
  Mit Zitat antworten Zitat
DonPedroFo

Registriert seit: 26. Jun 2019
14 Beiträge
 
#7

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 09:53
Erstmal danke für die schnelle Antwort.

Am besten ich schreib noch dazu was ich bisher gemacht habe.

- Textdatei in ein Memofeld laden
- Eine Textzeile in ein Editfeld kopieren
- Einzelne "Blöcke" in Editfelder kopieren.

siehe Bild
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.969 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 10:11
Ich finde das alles etwas zu kompliziert. TArray.Sort(..) aus System.Generics.Collections bietet dir alles um ein Array zu sortieren wie du magst. Die Adresse und andere Dinge lassen sich prächtig mit regulären Ausdrucken (System.RegularExpressions ) auslesen.

Hier ein Beispiel dass deine Strings der Adresse nach sortiert ausgibt:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
   System.SysUtils,
   System.Generics.Collections,
   System.Generics.Defaults,
   System.RegularExpressions;

type
   TAddress = Word;

   function getAddress(const line: String): TAddress;
   const
      pattern = '^S(\d)(\d){2}((\d){4}).*FF';
   var
      match: TMatch;
   begin
      match := TRegEx.Match(line, pattern);
      Result := TAddress.Parse(match.Groups[3].Value);
   end;

   procedure printLines(const lines: TArray<String>); inline;
   var
      line: String;
   begin
      for line in lines do
         WriteLn(line);
    end;

procedure p();
var
   lines: TArray<String>;
   sortByAddress: IComparer<String>;
begin
   lines := [
      'S10011223344556677889900AABBCCDDEEFF', // Adresse "1122"
      'S10010223344556677889900AABBCCDDEEFF', // Adresse "1022"
      'S10014223344556677889900AABBCCDDEEFF'  // Adresse "1422"
   ];

   sortByAddress :=
      TComparer<String>.Construct(
         function(const left, right: String): Integer
         begin
            Result := getAddress(left) - getAddress(right);
         end
      );

   TArray.Sort<String>(lines, sortByAddress);
   printLines(lines);
end;

begin
   p();
   readln;
end.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.093 Beiträge
 
Delphi 7 Professional
 
#9

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 10:15
Kurz und knapp:
Delphi-Quellcode:
procedure TForm1.SortMemo;
var
        i : Integer;
        k : Integer;
        s : String;
begin
  for i := 0 to Memo1.Lines.Count - 1 do begin
    for k := i + 1 to Memo1.Lines.Count - 1 do begin
      if Copy(Memo1.Lines[k],5,4) < Copy(Memo1.Lines[i],5,4) then begin
        s := Memo1.Lines[i];
        Memo1.Lines[i] := Memo1.Lines[k];
        Memo1.Lines[k] := s;
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.214 Beiträge
 
Delphi XE4 Professional
 
#10

AW: Sortieren eines Arrays of String

  Alt 8. Jul 2019, 11:01
Hallo,
Memo1.BeginUpdate/EndUpdate nicht vergessen.
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf