TAZttDevil Geschrieben 14. Februar 2003 Teilen Geschrieben 14. Februar 2003 Hallo zusammen... ich habe ein kleines Problem. Ich habe vor einiger Zeit mal ein Programm geschrieben, welches mit einen String in Teile zerlegt und dies in ein array speichert. Nun schreibe ich wieder ein Programm und brauche eine ähnliche funktion. Nur diesmal unterscheiden sich bei aufrufen die arrays. Also habe ich gedacht, ich übergebe mir den pointer auf ein array... Dummerweise läst Delphi im Funktionskopf nur unrefferenzierte poiner zu (oder mach ich was falsch??). Das wäre ja kein problem, nur wie kann ich den Pointer auf ein Array refferenzieren?? Hier der Code: procedure pc_ParsZeile( str_pars : string; p_array : pointer ); var i_tabs : integer; //alte Variable zum Trennzeichen zählen, dient als Zeiger im Array i : integer; //einfachere Zähler i_last : integer; //letzte Stelle in str_Pars an dem ein Trennzeichen vorkam begin i_last := 1; //init der Variablen i_tabs := 1; for i := 1 to 100 do //löscht das Array RefferenzierMich( p_array^ )[i] := ''; for i := 1 to length( str_pars ) do // if str_pars[i] in [';', #9] then begin //sucht nach Trennzeichen //wenn gefunden dann schreibe die Sachen zwischen dem letztem Trennzeichen (i_last) //und dem gefunden ins array RefferenzierMich( p_array^ )[i_tabs] := copy( str_pars, i_last, i - i_last); inc( i_tabs ); //erhöhe Zähler i_last := i+1; //setzte i_last neu end; RefferenzierMich( p_array^ )[i_tabs] := copy( str_pars, i_last, length( str_pars )); // i_AnzahlTabsD1 := i_tabs; end; der Aufruf RefferenzierMich müsste nur ersetzt werden.. nur cih weis nicht durch was... Gruß Taz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
progmaker Geschrieben 14. Februar 2003 Teilen Geschrieben 14. Februar 2003 Kann es sein das du da versuchst auf einen Pointer zu schreiben? Erklär mal genauer, was du machen willst. Wie unterscheiden sich die Arrays? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TAZttDevil Geschrieben 14. Februar 2003 Autor Teilen Geschrieben 14. Februar 2003 Hi.. ich möchte den pointer refferenzieren und zwar auf ein array, dann möchte ich in dieses Array schreiben. Die Arrays sind erst mal identisch. Mein vorhaben ist folgendes: Ich öffne zwei dateien. Dieses Dateien sind tabellarisch aufgebaut, Zeilen und Spalten. Nun möchte ich bestimmte werte aus diesen dateien mit einander vergleichen. Dazu lese ich die jeweilig zeile. Nun muss ich diese Zeile aufteilen in spalten (bzw. Zellen), dazu suche ich nach einem Feldtrennzeichen (siehe Routine oben). Die einzelnen Zellen sollen dann in ein array gespeichert werden. Das heisst eigentlich in zwei arrays, für jede datei (bzw. Zeile) ein eingenes Array. Da ich nun nicht zwei identische routinen benutzen möchte, wollte ich meiner Funktion neben der zur zerteilenden Zeile auch das Ziel array übergben. Da es aber ein wenig viel wird, das ganze array zu übergen (eine zeiel kann mehrere MB haben, und welcher stack macht das mit?? das ist verschwendung), wollte ich nur einen Pointer auf das array übergeben. Das funktioniert mit meinen stringlisten auc ganz hervoragend.. ... hmmm... wenn ic hdas so lese, ist das eigentlich die lösung... ich nehem statt einem array einfach ne stringliste.. .. hmm... mal schauen.. wenn trozdem noch jemand eine Lösung dafür hat, bitte immer her damit.. gruß Taz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TAZttDevil Geschrieben 14. Februar 2003 Autor Teilen Geschrieben 14. Februar 2003 Hallo.. hier nun meine Lösung mit den Stringlisten.. funktioniert einwandfrei: procedure pc_ParsZeile( str_pars : string; p_DestList : pointer ); var i : integer; i_last : integer; begin i_last := 1; for i := 0 to TStringList( p_DestList^ ).count -1 do TStringList( p_DestList^ ).Delete( 0 ); for i := 1 to length( str_pars ) do if str_pars[i] in [';', #9] then begin TStringList( p_DestList^ ).Add( copy( str_pars, i_last, i - i_last )); //erhöhe Zähler i_last := i+1; //setzte i_last neu end; TStringList( p_DestList^ ).add( copy( str_pars, i_last, length( str_pars ))); end; ich lösche daie liest mit der for schleife, da mit mit der routine: TStringList( p_DestList^ ).clear nicht nur die Inhalte sondern auch die refferenzen gelöscht werden. as Clear mach eich an einer anderen stelle im Programm... so long Taz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 14. Februar 2003 Teilen Geschrieben 14. Februar 2003 Hier ein Beispiel aus der Unit Forms: type PCursorRec = ^TCursorRec; TCursorRec = record Next: PCursorRec; Index: Integer; Handle: HCURSOR; end; procedure TScreen.InsertCursor(Index: Integer; Handle: HCURSOR); var P: PCursorRec; begin New(P); P^.Next := FCursorList; P^.Index := Index; P^.Handle := Handle; FCursorList := P; end; Den Typ PCursorRec solltest du auch bei Procedure Parametern verwenden können... vielleicht hilft dir das, hab nämlich auch nicht so ganz verstanden was du eigentlich willst Wieder ein bisschen lang fürs schreiben gebraucht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TAZttDevil Geschrieben 14. Februar 2003 Autor Teilen Geschrieben 14. Februar 2003 ja klar.. das geht.. lliegt aber daran, das das ein refferenzierter pointer ist.. nur kann ich den im fuction head nicht verwenden, dort sind irgendwie nur unrefferenzierte zulässig.. (glaub ich.. vielleich tmach ich auch was falsch..) gruß Taz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.