sehr langen String sortieren

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

sehr langen String sortieren

Beitrag von corado »

Hallo,
ich habe einen String in der Form von
S3.26543;3.53455;3.23323;12.5end insgesammt ist er zwischen 240-250 Zeichen lang... er sollte nach dem sortieren so aussehen.

3.25543
3.53455
3.23323
12.4

S ist das Starzeichen und end natürlich das Ende

Wie sorteire ich sowas am besten?
Ich habe lese den String momenten as char in ein Array...aber was nun?

wp_xyz
Beiträge: 5139
Registriert: Fr 8. Apr 2011, 09:01

Re: sehr langen String sortieren

Beitrag von wp_xyz »

Nehme eine Stringlist und setze den Delimiter auf ";". Weise der Eigenschaft "DelimitedText" deinen String zu, dann wird der String automatisch am Strichpunkt aufgetrennt. Mit der Eigenschaft StringList.Text hast du den gesamten String mit Zeilentrennern zwischen den Einzelstrings. Auf die einzelnen Strings kannst du mit "StringList[index]" zugreifen. In dem ersten String (StringList[0]) lösche das "S", und in dem letzten String lösche das "end".

Code: Alles auswählen

 
var
  list: TStringList;
begin
  list := TStringList.Create;
  try
    list.Delimiter := ';';
    list.StrictDelimiter := true;  // evtl. unnötig
    list.DelimitedText := 'S3.26543;3.53455;3.23323;12.5end';
    list[0] := copy(list[0], 2, Length(list[0]));  // "S" löschen
    list[list.Count-1] := copy(list[list.Count-1], 1, Length(list.Count-1]-3);  // "end" löschen
    ShowMessage('Der String mit index 5 ist: '+ list[5]);
    Memo.Lines.Text := list.Text;  // alles im Memo anzeigen
  finally
    list.Free;
  end;
end;
 

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

oh, super..ich wußte ja das Freepascal super ist...leider arbeite ich bei meinem Projekt aber nicht mit einem Freepascal :-( also gibt es diese Option einer so schicken Routine nicht :-(

wp_xyz
Beiträge: 5139
Registriert: Fr 8. Apr 2011, 09:01

Re: sehr langen String sortieren

Beitrag von wp_xyz »

leider arbeite ich bei meinem Projekt aber nicht mit einem Freepascal
Und warum postest du dann in einem FreePascal/Lazarus-Forum? Zu C++ oder Java wird dir hier niemand helfen

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: sehr langen String sortieren

Beitrag von Mathias »

leider arbeite ich bei meinem Projekt aber nicht mit einem Freepascal
was verwendest du den ?

PS: StringList ist eine sehr mächtige Komponente, die einem bei der Progammierung vieles einfacher macht. :D
Man denkt nur an speichern und laden von Dateien.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

Mikropascal..for microcontroller..das ist "etwas" weniger umfangreich..
Ich habe ledier als fertige Routinen nur Dinge wie Strnlenght und Stringcompare etc

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: sehr langen String sortieren

Beitrag von mschnell »

Was für ein Prozessor ? Für viele (moderne) Prozessoren gibt es fpc.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: sehr langen String sortieren

Beitrag von mschnell »

( Ah, deshalb empfindest Du die paar Byte als "sehr lang". Bei fpc können Strings 2 GByte lang werden :D . )

Was für ein Prozessor ? Für viele (moderne) Prozessoren gibt es fpc.

-Michael

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

derzeit Atmel..bald ARM 3 oder 4..
Aber Freepascal eigent sich dazu wohl noch nicht, zumindest ist das mein Wissenstand von vor einem jahr..da hatten selbst noch einfache FOR Schleifen Probleme verursacht :-(
Abgesehen davon gibt es zu wenig fertigs Units für Pascal, z.B. für CAN Controller, Displays etc.
Daher muss ich mit den PAscal Grundbefehlen klarkommen

Soner
Beiträge: 726
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: sehr langen String sortieren

Beitrag von Soner »

Ich würde mittels verkettete Liste machen dann kannst du gleich in die Liste beim Parsen sortiert einfügen, das Programm läuft dan schneller und beansprucht weniger Speicher, so etwa (Pseudo Code):

Code: Alles auswählen

 
  s:='S3.26543;3.53455;3.23323;12.5end'; //Ausgangstext
 von:=2; // 1. zeichen ist ja immer 'S'
 bis:=length(s)-3; //ohne 'end' am ende
 puffer:='' ; //puffer string
 trennzeichen:= false;
 
 ErstesElement:=nil; //erstes Element in der verketteten Liste
 ElemAnzahl:=0;      //anzahl Elemente in der verketteten Liste
 
 for i:=von  to bis do begin
    case s[i] of
       '0..9','.': puffer:=puffer + s[i];
       ';': trennzeichen := true;
    end;
 
    if trennzeichen or (i=bis) then begin //puffer in die liste
          //neue Listenelement erstellen und puffer dahin hinzufügen
          ...
 
         //jetzt in verkkettete Liste von anfang bis ende durchlaufen string vergleichen.
        // in die Liste am Ende oder dazwischen (wenn der nächste größer ist) hinzufügen
       ....
      // puffer variablen zurücksetzen
       Puffer:='';
        trennzeichen:=false;
   end;  
 
 end; 
 
//am ende hast du sortierte Liste
 
Ich würde das ganze als Konsolenprogramm mit Freepascal erstellen und testen danach mit deinem Mikrocomputer Kompiler.
In uses-Abschnitt des Programm nichts außer crt einfügen, Systembibliothek (RTL) wird automatisch eingebungen.
Ich nehme an da dein Kompiler Pascal ist unterstüzt vieles von FreePascal's RTL, deshalb kannst du RTL-Dokumentation von Freepascal zu Hilfe nehmen.
Viel Spaß.
Zuletzt geändert von Soner am Di 15. Apr 2014, 21:00, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: sehr langen String sortieren

Beitrag von mschnell »

ATMEL (8 Bit) ARM 3 und ARM 4 sind sicher keine "modernen" Architekturen.

Ich verwende für kleine Devices i.A. PIC. Da ich nie so hohe Stückzahlen habe, dass es auf einen Euro mehr oder Weniger beim Prozessor-Chip ankommt nehme ich jetzt immer PIC32. Das ist eine MIPS Architektur und da sollten fpc Programme laufen. Ich werde das demnächst mal testen.

-Michael

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

Das sieht schonmal recht hilfreich aus, werde mich damit mal beschäftigen.
Naja und die STM32 ARM CPUs sind ja alles andere als veraltet :-)
Aber wie gesagt, da FPC zu selten im embeddet Bereich eingesetzt wird, gibt es einfach viel zu wenig fertige Units/treiber für bausteine, Touchscreencontroller etc.

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

Kriese..
Was konnte man nochmal anstelle von '0..9' schreiben?
irgendwas mit ><, ich hoffe das funktioniert das bei einem char auch noch :-(

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

habs gefunden :-)
if (x >= 0) and (x <=10) then...else...

corado
Beiträge: 48
Registriert: Mi 7. Aug 2013, 17:00

Re: sehr langen String sortieren

Beitrag von corado »

aber funktionieren tut es so nicht.
if (x >= 0) and (x <=10) then...else...

müßte doch lauten
('Cell_char'>=0) and ('Cell_char'<=9),'.': puffer:=puffer + s;

Antworten