bozoo Geschrieben 12. November 2001 Geschrieben 12. November 2001 Tach, ich habe eine Funktion, die ich Rekursiv aufrufen müsste. Leider mit Filehandle (Lesen). Wie kann ich das anstellen? Ich kann ja nicht jedesmal das gleiche Filehandle benutzen, oder? Zitieren
Crush Geschrieben 12. November 2001 Geschrieben 12. November 2001 ??? Das blickt ja keiner ??? Da muß schon etwas mehr Informationsgehalt in die Frage rein !!! Warum sollte ich nicht einen Filehandle (const natürlich) oder halt einen Puffer in dem die File-Daten drinstehen (oder Array oder was auch immer) nicht einer rekursiven Funktion mitgeben ??? Um was geht´s hier überhaupt ??? Zitieren
bozoo Geschrieben 12. November 2001 Autor Geschrieben 12. November 2001 'tschuldigung, aber hab' mir die birne schon weichprogrammiert. ich versuch's aber nochma: aaaalso *tieflufthol*, ich habe einen filehandle, der eine datei einliest. inhalt der datei sind dateinamen. diese werden ausgelsen. -------------------bis hier hin fkt. alles------- jetzt soll zu jedem dateinamen die dazugehörige datei geöffnet werden.in dieser stehen dann wieder dateinamen, die eingelsen werden sollen und dateien, die geöffnet werden sollen usw. usf. wi ekann ich das am besten machen? Zitieren
Crush Geschrieben 12. November 2001 Geschrieben 12. November 2001 Ja, mit einem Rekursiven Ansatz bist Du da bestens bedient! Es gibt aber auch die Möglichkeit einfach mal alle Dateinamen von Datei 1 in ein Array zu lesen, dann alle Folgedateien und die Inhalte am Ende einfügen. So brauchst Du nur 2 Zeiger: Einen zum öffnen neuer Dateien und einen, der auf den letzten Array-Eintrag zeigt. Versehe noch jede Datei mit einem "schon gelesen" Flag und dann gehst Du das ganze einfach der Reihe nach durch. Irgendwann ist das Array mit 1000 Dateinamen voll! Fehlerbehandlung falls eine Datei zu einem Dateinamen nicht existiert nicht vergessen! Ein Problem gibt es dabei: Es wäre möglich, daß eine Kreuzverbindung das Programm auf ewig in eine Schleife schickt, die Dir Dein Array bis zum Überlauf füllt. Vielleicht sollte man kontrollieren, ob ein Dateiname schon geöffnet wurde oder nicht und dann den Lesevorgang abbrechen. <FONT COLOR="#a62a2a" SIZE="1">[ 12. November 2001 16:53: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
bozoo Geschrieben 12. November 2001 Autor Geschrieben 12. November 2001 Kann ich für das alles EINEN Filehandle zum Lesen nutzen, oder muss mir für jede neue Datei ein eigener Filehandle definiert werden. Ein Problem ist auch, dass nachdem eine ("Unter"-)Datei vollständig gelesen wurde, wieder zur "Hauptdatei gesprungen werden muss, bzw., im alten Filehandle weiter gemacht werden muss...... <FONT COLOR="#a62a2a" SIZE="1">[ 12. November 2001 17:22: Beitrag 1 mal editiert, zuletzt von volkaman ]</font> Zitieren
Crush Geschrieben 12. November 2001 Geschrieben 12. November 2001 Mach Dir doch auch einen Stack, auf dem die Filehandles abgelegt werden, sobald ein "Unter-File" geöffnet wird und beim Verlassen nimmst Du einfach den letzten Handle. Beim Rekursiven Programmieren ist das nicht so wichtig, weil durch die Funktionsaufrufe eh jedesmal ein neuer Handle erzeugt wird, da jeder Funktionsaufruf ja ein Unterprogramm ist, welches einen eigenen Stack erhält, eigene Variablen, etc. und nur das bekannt ist, was als Parameter übergeben wird. Du darfst also schon parameter übergeben, aber bitte nicht "by reference" sondern "by value" und dann vielleicht auch noch bei Bedarf "const". Dann wird ja eine Kopie angelegt und mit der darf man munter draufloswursteln. <FONT COLOR="#a62a2a" SIZE="1">[ 12. November 2001 17:53: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
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.