Wie weise ich 10000 Datensätze Variablen zu, ohne Indizierte
Wie weise ich 10000 Datensätze Variablen zu, ohne Indizierte
Hallo Basicfreunde
Habe schon viel in Basic programmiert. Meist grosse Datenmengen durchsucht und zu neuen Datensätzen zusammengeführt. Nun bittet mich ein Freund, das Gleiche mit seinen Daten (zehntausend Datensätze) und PureBasic zu machen. Kein Problem, dachte ich. Datensätze einlesen, in 10 Teile zerlegen, nach Kriterien durchsuchen und aus 3-10 Datensätzen einen neuen machen. Mit Indizierten Variablen in einer verschachtelten For-Next Schleife ist sowas schnell gelöst. Aber PureBasic versteht keine Indizierten Variablen.
Mir fällt keine Lösung ein. Kann einer von euch mir auf die Spünge helfen ???
Datenstruktur roh so:
Zweiheim;Ludwig;M 01183;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region;;Indonesien;;
Miler;Rainer;M 02050;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region;;Indonesien;;
Rohmeier;Rosi;M 02345;Karibik;ABC-Inseln (Aruba, Bonaire, Curacao);Verweis;Niederländische Antillen;;2009;Aruba
Burkwaldt;Siegride;M 02585;Karibik;ABC-Inseln (Aruba, Bonaire, Curacao);Verweis;Niederländische Antillen;;2003;
Stritzel;Hartmut;M 02012;Asien;Abu Dhabi;Region;;Vereinigte Arabische Emirate;2007;
Vorgen;Lorenz;M 02581;Asien;Abu Dhabi;Region;;Vereinigte Arabische Emirate;häufig;
Petermann;Klaus-Günther;M 00188;Asien;Afghanistan;Staat;;;2005;
Fortin;Peter;M 00551;Asien;Afghanistan;Staat;;;1998;
Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto
Johannes;Rolf;M 02375;Asien;Afghanistan;Staat;;;2003;
Küste;Barbara;M 02773;Asien;Afghanistan;Staat;;;2005;insges. 21 Mon. berufl.
Küste;Barbara;M 02773;Asien;Afghanistan;Staat;;;2004;
Küste;Barbara;M 02773;Asien;Afghanistan;Staat;;;2003;
Lodhart;Hermann;M 00922;Afrika;Afrika;Erdteil;;;2007;Marokko, Westsahara, Senegal, Mali, Burkina Faso,
Henel;Maria;M 01120;Afrika;Afrika;Erdteil;;;häufig;
Hirni;Horst;M 02594;Afrika;Afrika;Erdteil;;;2004;über Land nach Kapstadt
Schmitz;Falk;M 02675;Afrika;Afrika;Erdteil;;;2005;
Schmitz;Falk;M 02675;Afrika;Afrika;Erdteil;;;2004;
Eilig;Sebastian;M 02797;Afrika;Afrika;Erdteil;;;2003;ganzer Kontinent
Eilig;Sebastian;M 02797;Afrika;Afrika;Erdteil;;;2002;ganzer Kontinent
Gewünschtes Ergebnis:
Zweiheim;Ludwig;M 01183;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region >;;Indonesien;;
Miler;Rainer;M 02050;;;;;;;
Rohmeier;Rosi;M 02345;Karibik;ABC-Inseln (Aruba, Bonaire, Curacao);Verweis >;Niederländische Antillen;;2009;Aruba
Burkwaldt;Siegride;M 02585;;;;;2003;
Stritzel;Hartmut;M 02012;Asien;Abu Dhabi;Region;;Vereinigte Arabische Emirate;2007;
Vorgen;Lorenz;M 02581;;;;;;häufig;
Petermann;Klaus-Günther;M 00188;Asien;Afghanistan;;;;2005;
Fortin;Peter;M 00551;Asien;;;;;1998;
Kanzler;Robert Willhelm;M 02148;;;;;;2003;Landreise mit dem Auto
Johannes;Rolf;M 02375;;;;;;2003;
Küste;Barbara;M 02773;;;;;;2005,2004,2003;insges. 21 Mon. berufl.
Lodhart;Hermann;M 00922;Afrika;;;;;2007;Marokko, Westsahara, Senegal, Mali, Burkina Faso,
Henel;Maria;M 01120;;;;;;häufig;
Hirni;Horst;M 02594;;;;;;2004;über Land nach Kapstadt
Schmitz;Falk;M 02675;;;;;;2005,2004;
Eilig;Sebastian;M 02797;;;;;;2003,2002;ganzer Kontinent
Habt ihr einen Lösungsvorschlag mit Pure Basic 4.5 64bit auf Windows 7 64 bit Plattforn ??
in freudiger Erwartung
Mario26
Habe schon viel in Basic programmiert. Meist grosse Datenmengen durchsucht und zu neuen Datensätzen zusammengeführt. Nun bittet mich ein Freund, das Gleiche mit seinen Daten (zehntausend Datensätze) und PureBasic zu machen. Kein Problem, dachte ich. Datensätze einlesen, in 10 Teile zerlegen, nach Kriterien durchsuchen und aus 3-10 Datensätzen einen neuen machen. Mit Indizierten Variablen in einer verschachtelten For-Next Schleife ist sowas schnell gelöst. Aber PureBasic versteht keine Indizierten Variablen.
Mir fällt keine Lösung ein. Kann einer von euch mir auf die Spünge helfen ???
Datenstruktur roh so:
Zweiheim;Ludwig;M 01183;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region;;Indonesien;;
Miler;Rainer;M 02050;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region;;Indonesien;;
Rohmeier;Rosi;M 02345;Karibik;ABC-Inseln (Aruba, Bonaire, Curacao);Verweis;Niederländische Antillen;;2009;Aruba
Burkwaldt;Siegride;M 02585;Karibik;ABC-Inseln (Aruba, Bonaire, Curacao);Verweis;Niederländische Antillen;;2003;
Stritzel;Hartmut;M 02012;Asien;Abu Dhabi;Region;;Vereinigte Arabische Emirate;2007;
Vorgen;Lorenz;M 02581;Asien;Abu Dhabi;Region;;Vereinigte Arabische Emirate;häufig;
Petermann;Klaus-Günther;M 00188;Asien;Afghanistan;Staat;;;2005;
Fortin;Peter;M 00551;Asien;Afghanistan;Staat;;;1998;
Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto
Johannes;Rolf;M 02375;Asien;Afghanistan;Staat;;;2003;
Küste;Barbara;M 02773;Asien;Afghanistan;Staat;;;2005;insges. 21 Mon. berufl.
Küste;Barbara;M 02773;Asien;Afghanistan;Staat;;;2004;
Küste;Barbara;M 02773;Asien;Afghanistan;Staat;;;2003;
Lodhart;Hermann;M 00922;Afrika;Afrika;Erdteil;;;2007;Marokko, Westsahara, Senegal, Mali, Burkina Faso,
Henel;Maria;M 01120;Afrika;Afrika;Erdteil;;;häufig;
Hirni;Horst;M 02594;Afrika;Afrika;Erdteil;;;2004;über Land nach Kapstadt
Schmitz;Falk;M 02675;Afrika;Afrika;Erdteil;;;2005;
Schmitz;Falk;M 02675;Afrika;Afrika;Erdteil;;;2004;
Eilig;Sebastian;M 02797;Afrika;Afrika;Erdteil;;;2003;ganzer Kontinent
Eilig;Sebastian;M 02797;Afrika;Afrika;Erdteil;;;2002;ganzer Kontinent
Gewünschtes Ergebnis:
Zweiheim;Ludwig;M 01183;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region >;;Indonesien;;
Miler;Rainer;M 02050;;;;;;;
Rohmeier;Rosi;M 02345;Karibik;ABC-Inseln (Aruba, Bonaire, Curacao);Verweis >;Niederländische Antillen;;2009;Aruba
Burkwaldt;Siegride;M 02585;;;;;2003;
Stritzel;Hartmut;M 02012;Asien;Abu Dhabi;Region;;Vereinigte Arabische Emirate;2007;
Vorgen;Lorenz;M 02581;;;;;;häufig;
Petermann;Klaus-Günther;M 00188;Asien;Afghanistan;;;;2005;
Fortin;Peter;M 00551;Asien;;;;;1998;
Kanzler;Robert Willhelm;M 02148;;;;;;2003;Landreise mit dem Auto
Johannes;Rolf;M 02375;;;;;;2003;
Küste;Barbara;M 02773;;;;;;2005,2004,2003;insges. 21 Mon. berufl.
Lodhart;Hermann;M 00922;Afrika;;;;;2007;Marokko, Westsahara, Senegal, Mali, Burkina Faso,
Henel;Maria;M 01120;;;;;;häufig;
Hirni;Horst;M 02594;;;;;;2004;über Land nach Kapstadt
Schmitz;Falk;M 02675;;;;;;2005,2004;
Eilig;Sebastian;M 02797;;;;;;2003,2002;ganzer Kontinent
Habt ihr einen Lösungsvorschlag mit Pure Basic 4.5 64bit auf Windows 7 64 bit Plattforn ??
in freudiger Erwartung
Mario26
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
poste mal bitte ein Snippet in dem von Dir bevorzugten Basic-Dialekt.Mit Indizierten Variablen in einer verschachtelten For-Next Schleife ist sowas schnell gelöst.
Vielleicht verstehe ich dann besser, was Du mit 'indizierten Variablen' meinst.

Grüße ... Kiffi
a²+b²=mc²
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Sollte das nicht mit einem Array zu erledigen sein ?
Die Felder haben dabei eine Struktur vom Datensatz und einen *Pointer welcher ggf. auf ein Parent-Datensatz zeigt.
Falls ich das richtig verstanden hab was du da eigentlich machen willst ^^
Die Felder haben dabei eine Struktur vom Datensatz und einen *Pointer welcher ggf. auf ein Parent-Datensatz zeigt.
Falls ich das richtig verstanden hab was du da eigentlich machen willst ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Hi Kiffi
Laufvariable indiziert mit den Ergebnis der For - Next Schleife
vereinfracht mit nur drei Datensätzen dargestellt ohne die erforderlichen Read und Durchsuchbebefehle
For a = 1 to 3 = liest Datensatz(1)
For b = 1 to 10 = Zerlegt Datensatz (a)
Datensatz(a) = Zweiheim;Ludwig;M 01183;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region;;Indonesien;;
Teil(1), = Zweiheim
Teil(2), = Ludwig
Teil(3), = M 01183
Teil(4), = Asien
Teil(5), = ABC-Inseln (Ambon, Buru, Ceram)
Teil(6), = Region
Teil(7), = ""
Teil(8), = Indonesien
Teil(9), = ""
Teil(10) = ""
next b
next a
etc. etc
danach vergleiche ich die Daten von Datensatz(1) mit den Daten von 2-10 und bile4 daraus einen neuen Datensatz der zurüch auf die Platte geschrieben wird. Je nach Ergebnis der Suche wird Datensatz 2-?? gelöscht und mit dem nächsten nicht Gelöschten weitergemacht.
ZB: Gfa Basic, Aber auch Visual Basic
Laufvariable indiziert mit den Ergebnis der For - Next Schleife
vereinfracht mit nur drei Datensätzen dargestellt ohne die erforderlichen Read und Durchsuchbebefehle
For a = 1 to 3 = liest Datensatz(1)
For b = 1 to 10 = Zerlegt Datensatz (a)
Datensatz(a) = Zweiheim;Ludwig;M 01183;Asien;ABC-Inseln (Ambon, Buru, Ceram);Region;;Indonesien;;
Teil(1), = Zweiheim
Teil(2), = Ludwig
Teil(3), = M 01183
Teil(4), = Asien
Teil(5), = ABC-Inseln (Ambon, Buru, Ceram)
Teil(6), = Region
Teil(7), = ""
Teil(8), = Indonesien
Teil(9), = ""
Teil(10) = ""
next b
next a
etc. etc
danach vergleiche ich die Daten von Datensatz(1) mit den Daten von 2-10 und bile4 daraus einen neuen Datensatz der zurüch auf die Platte geschrieben wird. Je nach Ergebnis der Suche wird Datensatz 2-?? gelöscht und mit dem nächsten nicht Gelöschten weitergemacht.
ZB: Gfa Basic, Aber auch Visual Basic
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Na für sowas eignen sich doch LinkedLists ...
Datensätze reinschmeißen, mit ForEach durchlaufen, mit StringField() zerteilen ... und mit DeleteElement() löschen ...
Datensätze reinschmeißen, mit ForEach durchlaufen, mit StringField() zerteilen ... und mit DeleteElement() löschen ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Hallo Stargate
Hab mir LinkedLists mal angeschaut. So schnell ergibt sich für mich keine Idee für eine Lösung. Das scheitert schon bei der Übernahme der Daten in LinkedLists bei der Demo. Vielleicht kanst du mal eine Demo mit den Daten von oben schreiben bei denen das gewünschte Egebnis herauskommt.
Zum Verständnis:
Datensatz1=Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto
Datensatz2=Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2004;mit öffentlichen Verkehrsmitteln
Datensatz3=Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2005;mit dem Fahrrad
Teil(1), = Kanzler = Name soll nur einmal vorkommen
Teil(2), = Robert Willhelm
Teil(3), = M 02148
Teil(4), = Asien
Teil(5), = Afghanistan
Teil(6), = Staat
Teil(7), = ""
Teil(8), = ""
Teil(9), = 2003
Teil(10) = Landreise mit dem Auto
Neuer Datensatz aus den Dreien die die gleiche M Nummer (M 02148) haben und Afghanistan bereist haben soll der neue Datensatz der zurückgeschrieben wird so aussehen:
Datensatzneu1 = Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2005,2004,2003;mit dem Fahrrad,mit öffentlichen Verkehrsmitteln,Landreise mit dem Auto
Datensatzneu2 = Johannes;Rolf;M 02375;;;;;;2003;
Datensatzneu3 = Küste;Barbara;M 02773;;;;;;2005,2004,2003;insges. 21 Mon. berufl.
Wenn die folgenden Datensätze mit anderen M Nummern auch noch "Asien;Afghanistan;Staat" in Teil(4);Teil(5), und Tel(6) enthalten, sollen diese in den folgenden Datensätzen durch leerre Feldinhalte ersetzt werden bis ein abweichendes Ziel erscheint.
Ich hoffe ich habe mich verständlich ausgedrückt.
Hab mir LinkedLists mal angeschaut. So schnell ergibt sich für mich keine Idee für eine Lösung. Das scheitert schon bei der Übernahme der Daten in LinkedLists bei der Demo. Vielleicht kanst du mal eine Demo mit den Daten von oben schreiben bei denen das gewünschte Egebnis herauskommt.
Zum Verständnis:
Datensatz1=Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto
Datensatz2=Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2004;mit öffentlichen Verkehrsmitteln
Datensatz3=Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2005;mit dem Fahrrad
Teil(1), = Kanzler = Name soll nur einmal vorkommen
Teil(2), = Robert Willhelm
Teil(3), = M 02148
Teil(4), = Asien
Teil(5), = Afghanistan
Teil(6), = Staat
Teil(7), = ""
Teil(8), = ""
Teil(9), = 2003
Teil(10) = Landreise mit dem Auto
Neuer Datensatz aus den Dreien die die gleiche M Nummer (M 02148) haben und Afghanistan bereist haben soll der neue Datensatz der zurückgeschrieben wird so aussehen:
Datensatzneu1 = Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2005,2004,2003;mit dem Fahrrad,mit öffentlichen Verkehrsmitteln,Landreise mit dem Auto
Datensatzneu2 = Johannes;Rolf;M 02375;;;;;;2003;
Datensatzneu3 = Küste;Barbara;M 02773;;;;;;2005,2004,2003;insges. 21 Mon. berufl.
Wenn die folgenden Datensätze mit anderen M Nummern auch noch "Asien;Afghanistan;Staat" in Teil(4);Teil(5), und Tel(6) enthalten, sollen diese in den folgenden Datensätzen durch leerre Feldinhalte ersetzt werden bis ein abweichendes Ziel erscheint.
Ich hoffe ich habe mich verständlich ausgedrückt.
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Hier ein erster Anfang zum Laden der Daten:
Code: Alles auswählen
EnableExplicit
Structure Daten
Teil1.s
Teil2.s
Teil3.s
Teil4.s
Teil5.s
Teil6.s
Teil7.s
Teil8.s
Teil9.s
Teil10.s
EndStructure
Global NewList Datensatz.Daten()
Define File.s, FileNr
Define String.s, StringCount
Define Success
File = OpenFileRequester("", "Dateiliste öffnen:", "Text (*.txt)|*.txt;|Alle Dateien (*.*)|*.*", 0)
If Len(File) = 0 : End : EndIf
FileNr = ReadFile(#PB_Any, File)
If FileNr
While Eof(FileNr) = 0
String = ReadString(FileNr)
If AddElement(Datensatz())
With Datensatz()
\Teil1 = StringField(String, 1, ";")
\Teil2 = StringField(String, 2, ";")
\Teil3 = StringField(String, 3, ";")
\Teil4 = StringField(String, 4, ";")
\Teil5 = StringField(String, 5, ";")
\Teil6 = StringField(String, 6, ";")
\Teil7 = StringField(String, 7, ";")
\Teil8 = StringField(String, 8, ";")
\Teil9 = StringField(String, 9, ";")
\Teil10 = StringField(String, 10, ";")
EndWith
StringCount + 1
EndIf
Wend
CloseFile(FileNr)
MessageRequester("Ergebnis", "Fertig!" + #CRLF$ + Str(StringCount) + " Datensätze wurden geladen.")
Success = #True
Else
MessageRequester("Fehler!", "Konnte Datei nicht öffnen.")
Success = #False
EndIf
If Success = #True
; Hier eventuell etwas mit den geladenen Daten anstellen...
EndIf
Zuletzt geändert von c4s am 10.08.2010 23:35, insgesamt 1-mal geändert.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Hier der Code der die gewünschten veränderungen macht:
Einlesen, Filter, Zusammenführen, Ausgebe:
Aus:
Einlesen, Filter, Zusammenführen, Ausgebe:
Code: Alles auswählen
Structure Item
Array Field.s(10)
EndStructure
Global NewList Item.Item()
; Einlesen
Restore Rohdaten
Read.s String$
While String$
AddElement(Item())
Item()\Field(0) = String$ ; Rohdaten
; Zerstückeln
For Index = 1 To 10
Item()\Field(Index) = StringField(String$, Index, ";")
Next
Read.s String$
Wend
; Filtern
ForEach Item()
*Item.Item = @Item()
While NextElement(Item())
If Item()\Field(3) = *Item\Field(3) ; Gleiche M-Nummer
; Zusammführen
For Index = 1 To 10
If Item()\Field(Index) <> *Item\Field(Index)
*Item\Field(Index) + "," + Item()\Field(Index)
EndIf
Next
DeleteElement(Item())
EndIf
Wend
ChangeCurrentElement(Item(), *Item)
Next
; Neue Datensätze
ForEach Item()
Item()\Field(0) = Item()\Field(1)
For Index = 2 To 10
Item()\Field(0) + ";" + Item()\Field(Index)
Next
Next
; Ausgabe
ForEach Item()
Debug Item()\Field(0)
Next
DataSection
Rohdaten:
Data.s "Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto"
Data.s "Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2004;mit öffentlichen Verkehrsmitteln"
Data.s "Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2005;mit dem Fahrrad"
Data.s "Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto"
Data.s "Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2004;mit öffentlichen Verkehrsmitteln"
Data.s "Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2005;mit dem Fahrrad"
Data.s ""
EndDataSection
wird:Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto
Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2004;mit öffentlichen Verkehrsmitteln
Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2005;mit dem Fahrrad
Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2003;Landreise mit dem Auto
Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2004;mit öffentlichen Verkehrsmitteln
Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2005;mit dem Fahrrad
Kanzler;Robert Willhelm;M 02148;Asien;Afghanistan;Staat;;;2003,2004,2005;Landreise mit dem Auto,mit öffentlichen Verkehrsmitteln,mit dem Fahrrad
Kanzler;Robert Willhelm;M 05686;Asien;Afghanistan;Staat;;;2003,2004,2005;Landreise mit dem Auto,mit öffentlichen Verkehrsmitteln,mit dem Fahrrad
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Also es ist wohl noch nicht ganz so wie du dein Ergebnis haben willst, aber schau mal das hier an:
[EDIT]
Schad, da hab ich zwischenzeitlich mal etwas anderes gemacht und jetzt war alles umsonst.
Code: Alles auswählen
; Das hier musst du anpassen:
#FILENAME_SOURCE$ = "test.csv"
#FILENAME_DESTINATION$ = "test_new.csv"
; Also angenommen du kennst die Anzahl der Datensätze,
; dann ist ein Array von Vorteil, ansonsten
; solltest du eine LinkedList verwenden:
Structure Datensatz
OriginalText.s
Felder.s[10] ; Es gibt 10 Felder pro Datensatz
Zusammengefasst.i
EndStructure
NewList Daten.Datensatz()
Define k.i
; Lese die Datei Zeilenweise ein:
If ReadFile(0, #FILENAME_SOURCE$)
While Eof(0) = 0
AddElement(Daten())
Daten()\OriginalText = ReadString(0)
Daten()\Zusammengefasst = #False ; Dieser Datensatz wurde noch nicht zusammengefasst
; Jetzt finde die Felder innerhalb des Strings
For k = 0 To 9
Daten()\Felder[k] = StringField(Daten()\OriginalText, k + 1, ";")
Next k
Wend
CloseFile(0)
Else
Debug "Angegebene Datei nicht vorhanden."
EndIf
; Sortiere die Daten nach dem ersten Feld um im nächsten Schritt effizienter zu arbeiten
SortStructuredList(Daten(), #PB_Sort_Ascending, OffsetOf(Datensatz\Felder), #PB_Sort_String)
; Fasse die Daten zusammen
Define *CurrentElement.Datensatz
ForEach Daten()
If Not Daten()\Zusammengefasst
; Merke das aktuelle Element
*CurrentElement = @Daten()
; Suche nun die darauffolgenden Datensätze ab ob sie einen selben Namen enthalten
While NextElement(Daten())
If Daten()\Felder[0] = *CurrentElement\Felder[0]
; Füge den restlichen Text mit einem Komma an das aktuelle Element an ...
For k = 1 To 9
; ... aber nur wenn der Text nicht schon im aktuellen Element steckt
If FindString("," + *CurrentElement\Felder[k] + ",", "," + Daten()\Felder[k] + ",", 1) = 0
*CurrentElement\Felder[k] + "," + Daten()\Felder[k]
EndIf
Next k
; Alternativ könnte man das Element auch löschen
Daten()\Zusammengefasst = #True
Else
; Das erste Feld stimmt nichtmehr überein, also können wir hier die innere Schleife verlassen,
; denn die Liste ist ja sortiert.
Break
EndIf
Wend
; Springe zum alten Element zurück
ChangeCurrentElement(Daten(), *CurrentElement)
EndIf
Next
; Schreibe es in eine neue Datei rein:
If CreateFile(0, #FILENAME_DESTINATION$)
ForEach Daten()
If Not Daten()\Zusammengefasst
For k = 0 To 8
WriteString(0, Daten()\Felder[k] + ";")
Next k
; und nun einen Zeilenumbruch nach dem letzten Feld
WriteStringN(0, Daten()\Felder[k])
EndIf
Next
CloseFile(0)
EndIf
Schad, da hab ich zwischenzeitlich mal etwas anderes gemacht und jetzt war alles umsonst.

Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Re: Wie weise ich 10000 Datensätze Variablen zu, ohne Indizi
Immerhin hat er nun genug verschiedene Vorgehensweisen ^^
Und irgendwie habe ich das gefühl wir wissen immer noch nicht was er vorhat ...
Und irgendwie habe ich das gefühl wir wissen immer noch nicht was er vorhat ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr