| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: VB6: Zeile für Zeile in Array (585 mal gelesen)
|
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 27. Jun. 2008 13:56 <-- editieren / zitieren --> Unities abgeben:         
Tach, zusammen! Ich habe VBA-Array gar nicht gerne, die sind mir zu kompliziert (verglichen mit PHP). Kann mir bitte jemand mit meinem, vermutlich kleinem Problem weiterhelfen? Code: For i = 0 To (pointCount - 1) xValue = 23 yValue = 44 zValue = 33If xValue = Empty Then xValue = "0" If yValue = Empty Then yValue = "0" If zValue = Empty Then zValue = "0" ' <Do something useful with the data> Hopefully! :D strOneLine = xValue & Chr(9) & yValue & Chr(9) & zValue ' Print #intOutHandle, strOneLine If i > 0 Then ReDim XYZArray(0 To i) If i > 0 Then ReDim Preserve XYZArray(0 To i) ' XYZArray(q) = Array(xValue, yValue, zValue) XYZArray(i) = strOneLine Debug.Print LBound(XYZArray) ' Debug.Print XYZArray(i) Next i
Wie kriege ich meine Koordinaten in einen Array gestapelt? Welchen Typ muss ich den in meinen Array einlesen? Geht ein String nicht? Und, kann ich einen Array auch auf- oder absteigend sortieren? Das wäre wirklich ein Traum! Vielen Dank schon mal! G. ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Moderator Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600
|
erstellt am: 30. Jun. 2008 09:00 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Guten Morgen Gilbert, so wirklich blicke ich nicht durch was du vor hast. Jedoch kann ich dir gerne ein paar persönliche Tipps (bzw. Vorlieben) mitteilen. Ein ReDim eines Array sollte aus Laufzeit Gründen so oft es geht vermieden werden. Einfach das Array vor der Schleife auf die richtige Größe bringen:
Code: ReDim XYZArray(0 To pointCount - 1)
Warum wandelst du deine Punktkoordinaten in einen String um? Die Bearbeitung wird dadurch doch nur erschwert. Ich würde dir eine Klasse oder UDT in einer Collection (Liste) empfehlen. Das geht zwar in VB6 nicht ganz so schön wie in .net, aber mir persönlich gefällt es besser!
Code: 'UDT festlegen Public Type MyPoint X As Double Y As Double Z As Double End Type'UDT verwenden Dim oPoint as MyPoint 'X Koordinate Debug.Print oPoint.X
Sortieren kann man ein Array oder eine Collection klar. Einfach mal googln, ist nicht wirklich schwer.
------------------ Mfg Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 30. Jun. 2008 09:05 <-- editieren / zitieren --> Unities abgeben:         
Vielen Dank für Deine Antwort! Der Grund, wieso ich einen String brauche (denke ich jedenfalls), ist der, dass ich das dann in Datei schreiben möchte. Und hier: strOneLine = xValue & Chr(9) & yValue & Chr(9) & zValue füge ich noch einen Tabulator zwischen meine Werte. Ich werde aber Dein Snippet gerne mal ausprobieren! ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Moderator Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600
|
erstellt am: 30. Jun. 2008 09:11 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Hallo Gilbert, Ok, soweit schon mal klar! Aber wieso eine Schleife und ein Array? Du belegst doch die drei Value Variablen mit fixen Werten und schreibst diese einmal. Darauf ReDim's du zwei mal dein Array. Einmal ohne Preserve (alle vorhandenen Werte im Array gehen verloren) und einmal mit. Das bringt natürlich nichts! Die Frage die sich mir stellt ist also warum die Schleife und das Array? ------------------ Mfg Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 30. Jun. 2008 14:26 <-- editieren / zitieren --> Unities abgeben:         
Der Master-Plan war, dass ich den Array sortieren kann. Leider liest SolidWorks die Punkte wild durcheinander ein und nicht schön einer Reihenfolge nach. Dann, wenn ich aus den Punkten wieder eine Kurve machen will, überschniedet sich diese. Meine Idee war, wenn ich den Array sortiere, kann ich das total cool umgehen!  Aber ich kann nicht eine Datei sortieren, das geht leider nicht. Also brauche ich einen riesigen Array... ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Moderator Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600
|
erstellt am: 02. Jul. 2008 07:47 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Guten Morgen Gilbert, da ich wieder im Lande bin, hier mal meine Meinung dazu. Mit .net könnte man diese Aufgabe sehr einfach erledigen. In VB6 kann ich dich nur auf die verschiedenen Sortierverfahren verweisen, welche man im Netz findet (zum Beispiel hier und hier). Allerdings halte ich das ganz für sehr gefährlich. Angenommen du sortierst deine Punkte auf der X-Achse und deine Kurve macht auf dieser Achse einen Bogen, wodurch es zwei Punkte auf der X-Achse (oben und unten) gibt?! Soweit ich mich erinnern kann, gibt SolidWorks z.B. über GetPoints2 bei Splines immer eine korrekte Punktereihenfolge zurück. ------------------ Mfg Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004
|
erstellt am: 03. Jul. 2008 07:19 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von tbd: Soweit ich mich erinnern kann, gibt SolidWorks z.B. über GetPoints2 bei Splines immer eine korrekte Punktereihenfolge zurück.
Vielen Dank für die Infos! Hm, schon interessant! Wieso sollte sich dann eine Kurve überschneiden, wenn die Punkte der richtigen Reihenfolge eingelesen werden? Die Original Punkte überschneiden sich ja auch nicht? Ja, das mit dem Sortieren habe ich auch herausgefunden! Das lassen wir wieder sein! Array sortieren:
Code: First = LBound(xyzarray) Last = UBound(xyzarray) For w = First To Last - 1 For j = w + 1 To Last If xyzarray(w) > xyzarray(j) Then Temp = xyzarray(j) xyzarray(j) = xyzarray(w) xyzarray(w) = Temp End If Next j Next w
Irgendwo muss noch ein Fehler liegen, wenn sich die Kurve überschneidet (laut SolidWorks) und doch nicht!?!? ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |