sehr langen String sortieren
sehr langen String sortieren
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?
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?
Re: sehr langen String sortieren
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;
Re: sehr langen String sortieren
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 


Re: sehr langen String sortieren
Und warum postest du dann in einem FreePascal/Lazarus-Forum? Zu C++ oder Java wird dir hier niemand helfenleider arbeite ich bei meinem Projekt aber nicht mit einem Freepascal
-
- 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
was verwendest du den ?leider arbeite ich bei meinem Projekt aber nicht mit einem Freepascal
PS: StringList ist eine sehr mächtige Komponente, die einem bei der Progammierung vieles einfacher macht.

Man denkt nur an speichern und laden von Dateien.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: sehr langen String sortieren
Mikropascal..for microcontroller..das ist "etwas" weniger umfangreich..
Ich habe ledier als fertige Routinen nur Dinge wie Strnlenght und Stringcompare etc
Ich habe ledier als fertige Routinen nur Dinge wie Strnlenght und Stringcompare etc
-
- 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
Was für ein Prozessor ? Für viele (moderne) Prozessoren gibt es fpc.
-Michael
-Michael
-
- 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
( Ah, deshalb empfindest Du die paar Byte als "sehr lang". Bei fpc können Strings 2 GByte lang werden
. )
Was für ein Prozessor ? Für viele (moderne) Prozessoren gibt es fpc.
-Michael

Was für ein Prozessor ? Für viele (moderne) Prozessoren gibt es fpc.
-Michael
Re: sehr langen String sortieren
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
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
-
- 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
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):
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ß.
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
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.
-
- 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
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
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
Re: sehr langen String sortieren
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.
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.
Re: sehr langen String sortieren
Kriese..
Was konnte man nochmal anstelle von '0..9' schreiben?
irgendwas mit ><, ich hoffe das funktioniert das bei einem char auch noch
Was konnte man nochmal anstelle von '0..9' schreiben?
irgendwas mit ><, ich hoffe das funktioniert das bei einem char auch noch

Re: sehr langen String sortieren
habs gefunden 
if (x >= 0) and (x <=10) then...else...

if (x >= 0) and (x <=10) then...else...
Re: sehr langen String sortieren
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;
if (x >= 0) and (x <=10) then...else...
müßte doch lauten
('Cell_char'>=0) and ('Cell_char'<=9),'.': puffer:=puffer + s;