Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Suchen, verarbeiten Daten aus Array (https://www.delphipraxis.net/163838-suchen-verarbeiten-daten-aus-array.html)

gallstone 18. Okt 2011 14:59

Suchen, verarbeiten Daten aus Array
 
Hi Leute,

wie einige wissen habe ich mir ein Array aus einer Textdatei gefüllt (http://www.delphipraxis.net/163726-t...-kopieren.html)

Ich stehe nun vor dem Problem der Auswertung.
In dem Array sind nun Auftrag erfasst.

0............1
Auftrag......Franktion
1234.........1
1234.........1
1234.........1
1235.........1
1236.........1
1236.........1
1236.........2
1236.........2
1237.........1
1237.........2
1237.........3
1237.........4
usw.

Es gibt nun folgende Fälle (bei Aufträgen mit mehreren Zeilen):

1. wenn eine Auftragsnummer immer die gleiche Franktion hat (immer 1) dann soll jede Zeile erhalten bleiben
2. wenn die Franktion wechselt soll immer nur die erste Zeile erhalten bleiben
auch wenn es so aussieht wie im Beipiel 1236.

Wie würdet ihr an sowas heran gehen?

Ich habe mir überlegt:

ich schaue ob in feld[0,0] der gleiche Wert steht wie in feld[1,0] und in feld[0,1] auch gleich -->
wenn nein, dann kpoiere ich feld[0,k] in ein neues Feld (zum weiterarbeiten). wenn ja dann kopiere ich alle Zeilen in ein neues Feld.

Ist das vom Ansatz her richtig?
Gibt es einen Befehl ganze Zeilen auf einmal von einem Array in ein nächste zu kopieren ohne schleife?

himitsu 18. Okt 2011 15:32

AW: Suchen, verarbeiten Daten aus Array
 
Jetzt die Frage: Warum wolltest du das unbedingt in einem Array haben?

Ein Array mittendrin zu verändern ist nunmal nicht so "einfach".
Bei einer TStringList ruft man einfach Delete auf und weg ist die Zeile, wärend man beim Array eben alle nachfolgenden Werte/Zeilen selber um 1 nach vorne verschieben und die Arraylänge anpassen muß.

Also nein, es geht nicht ohne Schleife. (und wer mir jetzt mit [OH]Move[OH] kommt, der bekommt ein paar auf die Finger :warn: )


Bei dem hier vorliegenden Wissensstand und da es eh nicht auf Geschwindigkeit ankommt, würde ich hier davon abraten an dem Speichermanagerment der Strings rumzumanipulieren.


@DeddyH: Jupp, und wenn man schon dabei ist, kann man dort auch gleich die Zeilen mit aufteilen, da hier ja jeweils zwei Werte in einer Zeile/String abgelegt sind.

DeddyH 18. Okt 2011 15:34

AW: Suchen, verarbeiten Daten aus Array
 
Und da die Daten ja in Beziehung zueinander stehen, bietet sich ein Record oder eine Klasse an. Das in eine Liste gepackt, dann kann man wunderbar sortieren, einfügen, löschen etc.

[edit] @Frank: Mit den Daten, die in Beziehung stehen, meinte ich ja Auftrag und Franktion (btw: was ist das? Sollte das vielleicht Fraktion heißen?). Diese beiden stellen dann die Felder des Records/der Klasse dar. [/edit]

gallstone 18. Okt 2011 15:53

AW: Suchen, verarbeiten Daten aus Array
 
Hi,

ja es ist nicht "so einfach", habe ich bemerkt. komme auch schnell durcheinander mit den ganzen schleifen.
stecke halt da nicht so drinn.

fraktion soll es heißen ;)

da glücklicherweise die zeilen immer gleich sind, werde ich mich mal an einer anderen variante versuchen (memofeld als zwischenlager).

mal sehen ob das fruchtet.

@deddy:

ich habe mal deinen qt aus dem anderen thread versucht. kann es sein, dass bei delphi 2007 das ganze net dockt?
Code:
type
  TDeinArray = array of array of string;


da meckert er:

doppelpunkt erwartet aber = gefunden
mache ich einen doppelpunkt sacht er: bezeichner erwartet aber : gefunden ;)

oder fehlt mir noch mehr?

DeddyH 18. Okt 2011 15:56

AW: Suchen, verarbeiten Daten aus Array
 
Mein Delphi 2007 schluckt das anstandslos. Hast Du es vielleicht an die falsche Stelle geschrieben?

gallstone 18. Okt 2011 16:06

AW: Suchen, verarbeiten Daten aus Array
 
Zitat:

Zitat von DeddyH (Beitrag 1131082)
Mein Delphi 2007 schluckt das anstandslos. Hast Du es vielleicht an die falsche Stelle geschrieben?

kommt drauf an wo es richtig ist :)

hab es bei allen anderen unter type hingeschrieben, also ganz oben.

p80286 18. Okt 2011 16:23

AW: Suchen, verarbeiten Daten aus Array
 
Zitat:

Zitat von gallstone (Beitrag 1131087)
hab es bei allen anderen unter type hingeschrieben, also ganz oben.

Dann zeig doch mal was bei Dir noch so alles ganz oben steht :-)

Gruß
K-H

gallstone 19. Okt 2011 15:12

AW: Suchen, verarbeiten Daten aus Array
 
Code:
type
  TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    OpenDialog1: TOpenDialog;
    BitBtn1: TBitBtn;
    BitBtn3: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    BitBtn2: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
so und darunter habe ich es geschrieben. ist doch richtig oder?

DeddyH 19. Okt 2011 15:29

AW: Suchen, verarbeiten Daten aus Array
 
Noch innerhalb der TForm1-Deklaration? Da ist es falsch.

gallstone 20. Okt 2011 08:39

AW: Suchen, verarbeiten Daten aus Array
 
Zitat:

Zitat von DeddyH (Beitrag 1131308)
Noch innerhalb der TForm1-Deklaration? Da ist es falsch.

ok, wo dann?

danke!

DeddyH 20. Okt 2011 08:58

AW: Suchen, verarbeiten Daten aus Array
 
Z.B. direkt oben drüber, direkt unten drunter (also hinter das end;) oder im Implementation-Abschnitt, sofern Du im interface noch nicht darauf zugreifst.

Bummi 20. Okt 2011 09:29

AW: Suchen, verarbeiten Daten aus Array
 
Delphi-Quellcode:
type
// HIER

  TForm1 = class(TForm)

gallstone 3. Nov 2011 18:29

AW: Suchen, verarbeiten Daten aus Array
 
Hi,

will mich mal wieder zu Wort melden, nachdem ich länger keine Nerven und Zeit hatte.
Nutze jetzt ein Memofeld (in das ich die Ausgangsdatei mit Tabstops und x Linien lade). Ist für mich am einfachsten. Später werde ich dies unsichtbar machen, damit der User davon nix mertk.
Zum Glück sind die Eingangsdaten immer gleich.

Um auf eine Stelle nach dem x-ten Tab zuzugreifen nehme ich jetzt eine Funktion, hier übergebe ich die i-te Zeile des Memofeldes mit der gewünschten Tabposition:

Code:
function StelleAuslesen(tab:integer;tmp:string):string;
var stelle,i:integer;
begin
  i:=0;
  stelle:=0;
  while i<tab do
    begin
      tmp:=copy(tmp,stelle+1,length(tmp));
      i:=i+1;
      stelle:=pos(#9,tmp);
    end;
  result:=copy(tmp,0,stelle-1);
end;
Denke mir mal, dass dies für euch ein Witz ist, aber ich habe mich gefreut, als ich das endlich hinbekommen habe :)

Nun ist es für mich echt einfach.
Resultat sollte im übrigen sein, aus jeder Zeile eine mehrzeilige Txt zu erzeugen mit vielen Daten (wenn in mehreren Zeilen die Fraktion gleich ist, sollen die immer wieder in die selbe Txt geadded werden). Diese Datei soll dann in ein Programm importiert werden welches die Maschinenbestückung ermittelt (externer Hersteller).
Das geht ja dann recht fix über String zusammenbauen ... jede Zeile mit Daten füllen und Zeile mit "0" abschließen an der 50sten Position. Naja werde ich wieder ein Memofeld missbrauchen :)...

Danke an alle, oder mal warten vielleicht melde ich mich nochmal :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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