AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String in Array einlesen

Ein Thema von jupiter4065139 · begonnen am 4. Jun 2013 · letzter Beitrag vom 14. Jun 2013
Antwort Antwort
Seite 3 von 4     123 4      
musicman56
(Gast)

n/a Beiträge
 
#21

AW: String in Array einlesen

  Alt 5. Jun 2013, 12:02
Hallo,

also bitte mal der Reihe nach. Vielleicht hab ich ja was falsch verstanden. Dann korrigiert mich bitte. So schrieb es der TE:

Zitat:
Ich möchte nun die Werte in Spalte 2 der Größe nach ordnen, mit den zugehörigen Werten aus Spalte 1 und 3.
Das hab ich so verstanden, dass die Sortierung in dieser Reihenfolge/Priorität erfolgen sollte:

Spalte 2 + Spalte 1 + Spalte 3, also nicht nur nach Spalte 2. Demzufolge kann die Lösung mit TList so nicht funktionieren, weil eben NUR nach Spalte 2 sortiert wird, und Spalte 1 und 3 werden in der Sortierung ignoriert.

Der record könnte dann beispielsweise so aussehen:

Delphi-Quellcode:
type
  PMyData = ^TMyData;

  TMyData = record
    Col1, Col2, Col3 : string;
    Cols : string;
  end;
...wobei Cols dann Col2+Col1+Col3 wäre und die Sortierung dann...

Delphi-Quellcode:
function CompareMyDataCol2( Item1, Item2 : Pointer ) : Integer;
begin
  Result := CompareStr( PMyData( Item1 ).Cols, PMyData( Item2 ).Cols );
end;
....und bei der Ausgabe dann wieder den string zusammensetzen aus Col1+Col2+Col3.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: String in Array einlesen

  Alt 5. Jun 2013, 12:06
Das hatten wir doch schon

In SQL würde das so aussehen
SQL-Code:
SELECT
  Col1, Col2, Col3
FROM
  MyTable
ORDER BY
  Col2
Wie er Strings sortiert weiß er, aber nicht wie er nach der Sortierung den logischen Zusammenhang wieder hinbekommt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 5. Jun 2013 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: String in Array einlesen

  Alt 5. Jun 2013, 12:07
Das habe ich (und zumindest Sir Rufo auch) so nicht verstanden. Vielmehr geht es darum, nach Spalte 2 zu sortieren, aber die Zugehörigkeit zu den anderen beiden Werten nicht zu verlieren. Und selbst wenn nach mehreren Spalten in einer bestimmten Reihenfolge sortiert werden soll, erweitert man den Callback entsprechend und fertig.
Delphi-Quellcode:
function CompareFunc(Item1, Item2: PRec): integer;
begin
  Result := AnsiCompareStr(Item1^.Col2, Item2^.Col2);
  if Result = 0 then
    Result := AnsiCompareStr(Item1^.Col1, Item2^.Col1);
  if Result = 0 then
    Result := AnsiCompareStr(Item1^.Col3, Item2^.Col3);
end;
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
musicman56
(Gast)

n/a Beiträge
 
#24

AW: String in Array einlesen

  Alt 5. Jun 2013, 12:13
Das ist der Punkt bzw. Unterschied...ich hab's so verstanden:

Code:
SELECT
  Col1, Col2, Col3
FROM
  MyTable
ORDER BY
  Col2, Col1, Col3
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#25

AW: String in Array einlesen

  Alt 5. Jun 2013, 14:20
Hallo an alle:

mal zum Verständnis: man will niemanden ärgern, wir wollen ja alle nur mal Helfen und manchmal lernt man was neues

was DeddyH in seinem Quellcode macht und Sir Rufo im Quellcode (seinen ersten Beitrag angedeutet hat), ist einen Record der Liste zu übergeben und die Sortierfunktion entsprechen umzuleiten, das nach dem 2'ten Feld sortiert wird.

Meine Lösung macht das auf altbackene weise, so kann man es aber nachvollziehen (ist aber langsamer).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: String in Array einlesen

  Alt 5. Jun 2013, 14:30
Nunja, das Hauptproblem, das ich persönlich mit Deinem Code habe, ist die Vermischung von Logik und Darstellung. Es liest sich so, als ob man unbedingt Memos bzw. Listboxen bräuchte, um das Problem zu lösen. Das geht natürlich auch, ist aber IMO unschön.
Nothing for ungood
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
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#27

AW: String in Array einlesen

  Alt 5. Jun 2013, 14:40
Nun ich wurde mal als Listboxenprogrammierer beschimpft um schnell eine Lösung zu machen, die würde ja einem Prof nicht gefallen, aber der wird ja auch nicht nach dem Ergebnis bezahlt sondern nur nach ....

Mit XE4 und iOS wurde mir klar, das ist das neueste vom neuen, da geht ja fast alles über meine liebe Listbox und die kann ja jetzt auch richtig viel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: String in Array einlesen

  Alt 5. Jun 2013, 14:44
Listboxenprogrammierer
Den Begriff muss ich mir mal notieren
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
jupiter4065139

Registriert seit: 22. Mär 2013
23 Beiträge
 
#29

AW: String in Array einlesen

  Alt 14. Jun 2013, 14:38
Hallo,

vielen Dank für die rege Beteiligung. Ich war letzter zeit verhindert und kann das Problem jetzt erst wieder anpacken. Ich bin zur Zeit dabei mein String in records einzulesen wie bei DeddyH

Delphi-Quellcode:
type
  PRec = ^TRec;
  TRec = record
    Col1, Col2, Col3: string;
  end;

...

//Befüllen
var
  NewRec: PRec;
begin
  New(NewRec);
  NewRec^.Col1 := 'Anton';
  NewRec^.Col2 := 'Berta';
  NewRec^.Col3 := 'Cäsar';
  FList.Add(NewRec);
  New(NewRec);
  NewRec^.Col1 := 'August';
  NewRec^.Col2 := 'Bär';
  NewRec^.Col3 := 'C++';
  FList.Add(NewRec);
  New(NewRec);
  NewRec^.Col1 := 'Auf der Mauer';
  NewRec^.Col2 := 'Auf der Lauer';
  NewRec^.Col3 := 'Dideldum dideldei';
  FList.Add(NewRec);
end
wie gesagt mein string sieht folgendermaßen aus

mystring := col1 + #9 + col2 + #9 +col3;

mit ungefähr hundert zeilen. Wie mach ich denn das am Besten den Pointer NewRec^.Col1 eine Schleife zu verpassen das der mir nur die col1 mit den 100 Werten aus dem string einliest.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#30

AW: String in Array einlesen

  Alt 14. Jun 2013, 15:21
Ein wenig konfus was Du da willst.
Gehen wir mal davon aus, daß Du eine Funktion hast, die die Inhalte aus einem String auslesen kann (wert:=getcol(i,mystring); )

dann müßte die Verarbeitung ungefähr so aussehen:

Delphi-Quellcode:
var
  NewRec: PRec;
begin
  Stringlist:=tStringlist.Create;
  Stringlist.Loadfromfile('meinedaten.txt');
  for i:=0 to Stringlist.count-1 do begin
    New(NewRec);
    NewRec^.Col1 := getcol(1,Stringlist[i]);
    NewRec^.Col2 := getcol(2,Stringlist[i]);
    NewRec^.Col3 := getcol(3,Stringlist[i]);
    FList.Add(NewRec);
  end;
Wenn Du nur eine Spalte lesen willst dann vllt. so:
Delphi-Quellcode:
var
  NewRec: PRec;
begin
  Stringlist:=tStringlist.Create;
  Stringlist.Loadfromfile('meinedaten.txt');
  for i:=0 to Stringlist.count-1 do begin
    New(NewRec);
    NewRec^.Col1 := getcol(1,Stringlist[i]);
    NewRec^.Col2 := '';
    NewRec^.Col3 := '';
    FList.Add(NewRec);
  end;

U.U wäre es besser mit einem Array of Col zu arbeiten, da könntest Du die einzelnen spalten direkt über einen Index ansprechen.
Aber bitte nicht vergessen vorher alle Felder zu initialsieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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