AMIGA-RESISTANCE https://forum.amiga-resistance.info/ |
|
nächste Datei einladen... ist das wirklich so umständlich https://forum.amiga-resistance.info/viewtopic.php?f=38&t=3277 |
Seite 1 von 1 |
Autor: | root [ 07 Jul 2012, 13:17 ] |
Betreff des Beitrags: | nächste Datei einladen... ist das wirklich so umständlich |
Hallo Bin mit meinem kleinen Programm nun endlich mal weiter gekommen Nun möchte ich per Icon die nähchste Datei einladen lassen. Hab mich durch die DOS Abteilung in der Anleitung gewühlt und angefangen mir etwas zu basteln dann stellt sich mir die Frage muß man das wirklich so kompliziert machen. Ich umschreib mal grob den Ablauf. 1.beim Datei öffnen lese ich den Ort der ersten Datei aus a=GetFileAttributes(f$) 2.dann extrahiere ich das Verzeichnis path$=PathPart(a.path) 3.danach lese ich das Verzeichniss durch und hau alle Sachen in eine Liste fcount=ReadDirectory(path$, files$, dirs$) ...jetzt müßte ich ja diese Liste noch nach brauchbaren Dateien (*.asc) durchsuchen. Schauen wo die Datei steht welche ich gerade geöffnet habe dann schauen welche als nähchstes kommt oder halt davor kommt ... ahhh warum gibt es kein OpenNextFile |
Autor: | HelmutH [ 08 Jul 2012, 16:37 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Hi root Ich hab auch grad mal ins Handbuch reingeschaut und da nur - OpenFile(1, "Platte:Filename") und - @File 1, "Platte:Filename" gefunden zum öffnen von Dateien. Würde da ein OpenFile nicht ausreichen für das was du da vorhast |
Autor: | root [ 08 Jul 2012, 19:54 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
ja mit OpenFile gehts es ja zum schluß auch weiter nur dazu muß ich erst durch auslesen de Verzeichnisses usw. wissen welche Datei als nähchstes geöffnet werden soll. Hab nur gerade nen Klotz im Kopp und komme überhaupt nicht weiter. Bei dem Programm Loview geht das ja auch das man sich da durch die Bilder clicken kann. Vielleicht werd ich den Author mal faragen wie er das gelöst hat. |
Autor: | Tipsi [ 09 Jul 2012, 11:44 ] | |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich | |
Salli root
Code: Alles auswählen For Zaehler=0 To fcount-1 Gefunden=FindStr(files$[Zaehler],".asc") If Gefunden<>-1 ;Hier ist Dein Code, ;um die Daten aus der ;Datei zu lesen oder ;was auch immer. EndIf Next durch, kontrollierst, ob es sich um eine .asc Datei handelt und falls Ja, wird sie gleich bearbeitet. Dieser Code funktioniert aber nur, wenn er immer auf das selbe Verzeichnis angewandt wird. Unterverzeichnisse werden so nicht berücksichtigt (wäre aber mit zusätzlichen Codezeilen möglich). In fcount$ ist ja die Anzahl Dateien abgelegt, welche aus dem Verzeichnis ausgelesen wurden. Die Variable Zaehler wird in jedem Durchgang der For-Next Schleife um 1 erhöht. Das braucht es, um die ausgelesenen Dateinamen einen nach dem anderen zu kontrollieren, ob es sich um eine .asc Datei handelt. Zaehler wird mit Null gestartet, da das Zählen eines Array auch bei Null beginnt. Bei fcount$ wird auch eins abgezogen, aus dem selben Grund wie bei Zaehler. Griessli Tipsi |
Autor: | root [ 23 Jul 2012, 15:55 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Hey tipsi ja danke mit dem Tipp zu Findstrg da hätte ich mal früher drauf kommen können. Hab das nun so gelöst Code: Alles auswählen Function p_4andback() files$={} ;Liste für Dateien (alle aus dem root Dir) dirs$={} ;Liste für Verzeichnisse filelist$={} ;Liste für gefundene asc Dateien filenr=0 ;Anzahl der gefundenen asc Dateien fcount=ReadDirectory(path$, files$, dirs$) ;zählt Dateien und Verzeichnise aus filename=FilePart(a.path) ;extrhiert den Dateinamen zu "filename" For i=0 To fcount-1 ;startet vergleichsschleife target=FindStr(files$[i],".asc") ;durchsucht die Liste der Dateien nach asc Files If target<>-1 ;wird eine asc Datei gefunden wird sie in die eingetragen filelist$[filenr]=files$[i] ;Filelist enthält nun eine Liste mit asc Dateien filenr=filenr+1 ;nummeriert die Filelist durch EndIf Next endlist=filenr-1 ;bestimmt das Ende der Filelist (0 ist eine Zahl) For filenr=0 To endlist found=FindStr(filelist$[filenr],filename) ;sucht in die Filelist nach der aktuellen Datei If found<>-1 akdateinr=filenr ;gibt die aktuelle Nummer aus If filenr = 0 ;ist die Datei am Anfang der Liste wird das zurück gehen p_goprevaus ;deaktiviert Else p_goprevan ;wenn nicht dan wird es angeschaltet EndIf If filenr = endlist ;überprüft ob die Datei am Ende der Liste steht p_gonextaus ;wenn ja dann wird das vor gehen abgeschaltet Else p_gonextan ;wenn nicht dann wird es an geschaltet EndIf EndIf Next EndFunction a=GetFileAttributes(f$) ;legt das Verzeichnis der geöffneten Datei in a.path ab path$=PathPart(a.path) ;extrahiert das Verzeichnes der geöffneten Datei aus a.path mit abgefragt. Um eine nun eine Datei weiter zu laden hab ich das so gelöst: Code: Alles auswählen Function p_gonext() If filenr = endlist Else nextfile$=filelist$[akdateinr+1] ;liest aus der Filelist de nähchste Datei aus datei2$=FullPath(path$,nextfile$) ;erzeugt aus der nähchsten Datei und dem root Verzeichnis p_iconchange8 ;die neue Zieldatei p_opennextfile ;übergibt diese dann an opennextfile EndIf EndFunction Jetzt muß ich das nur noch schaffen das ich per Tastendruck nicht über das Listenende hinaus lese. |
Autor: | Tipsi [ 24 Jul 2012, 16:30 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Ah, Du scheinst ja wieder vorwärts zu kommen. Ich gehe mal davon aus, dass Dein Code funktioniert. Beim Auskommentieren des Codes würde ich nicht jede Zeile beschreiben, was sie erledigt. Wenn z.B. eine Funktion nicht allzuviele Zeilen beinhaltet, reicht es, am Anfang eine kurze Beschreibung zu notieren. Ansonsten kannst Du auch mehrere Zeilen zusammenfassen und kommentieren. Falls Du das Ende der Liste nicht vorher sanft abfragen kannst, geht es auch gewürgt: Code: Alles auswählen ExitOnError(False) ;Bei Fehler kein Programmabbruch nextfile$=filelist$[akdateinr+1] Local ErrorCode=GetLastError() If ErrorCode<>0 ;Null ist alles OK ;Hier kommt der Code rein, wenn das Ende ;der Liste überschritten wird Else ;Und hier der normale Code, solange ;das Ende nicht erreicht ist EndIf ExitOnError(True) ;Bei Fehler wird Programm wieder abgebrochen Hollywood ausspuckt, wenn das Ende der Liste überschritten wird und fragst spezifisch diese Fehlernummer ab: Code: Alles auswählen ExitOnError(False) ;Bei Fehler kein Programmabbruch nextfile$=filelist$[akdateinr+1] Local ErrorCode=GetLastError() ; If ErrorCode=ErrorCodeWelcherHollywoodAusgespucktHat ;Hier kommt der Code rein, wenn das Ende ;der Liste überschritten wird Else ;Und hier der normale Code, solange ;das Ende nicht erreicht ist EndIf ExitOnError(True) ;Bei Fehler wird Programm wieder abgebrochen Tipsi |
Autor: | root [ 24 Jul 2012, 18:09 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Ja bin eigentlich auch schon so gut wie fertig also mit den grundlegenden Teil. Bin nun ersteinmal dabei alles ausgiebig zu testen. Was garnicht geht ist das wenn ich die Textdatei als Datei öffne (also Doppelclick auf Icon) dann das Programm als Sandartprogramm festgelegt habe. Strartet zwar das Programm aber die Datei wird nicht geladen. Und weil du so gut bist haste natürlich schon meinen nähchsten Gedanken vor weg gegriffen Das abschalten von den Errorhandler hatte ich sowieso vor und nu weis ich auch gleich wie |
Autor: | Tipsi [ 24 Jul 2012, 20:50 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Tja, als Helseher wusste ich natürlich sofort, dass Du den Errorhandler abschalten wolltest. Schön wär's. Dein Problem mit dem Doppelklick auf dem Icon und der Text wird nicht automatisch beim Programmstart geladen, ist auch Neuland für mich. Da weiss ich im Moment auch keine Möglichkeit. Vielleicht kann da jemand anderes weiterhelfen. Griessli Tipsi |
Autor: | root [ 28 Jul 2012, 17:52 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Habe gerade festgestellt das Hollywood Dateien in einem Ordner anders auflistet als Windows es tut. so macht es Windows 1-100.txt 1-200.txt 1-300.txt 1.400.txt 1.500.txt 1-600.txt 1-700.txt 1-800.txt 1.900.txt 1.1000.txt so macht es Hollywood 1-100.txt 1.1000.txt 1-200.txt 1-300.txt 1.400.txt 1.500.txt 1-600.txt 1-700.txt 1-800.txt 1.900.txt Hab mal den Andreas eine Mail geschrieben, mal sehen was er dazu sagt. |
Autor: | Tipsi [ 29 Jul 2012, 08:00 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Salli root Der MOV-Player (Windows Version) listet ähnlich wie Hollywood auf. Umgehen könntest Du dieses verschiedene auflisten, indem Du nach dem Punkt oder Strich bei den dreistelligen Nachkomma-/ Nachstrichzahlen eine Null einfügst: 1-0100.txt 1-0200.txt 1-0300.txt 1.0400.txt 1.0500.txt 1-0600.txt 1-0700.txt 1-0800.txt 1.0900.txt 1.1000.txt Das geht allerdings nur, wenn Du weisst, wieviel Stellen maximal nach dem Komma oder Strich kommen. Ich denke, Hollywood listet gleich auf wie Amiga. Windwos ist da ein wenig "intelligenter". Griesslil Tipsi |
Autor: | root [ 29 Jul 2012, 20:54 ] |
Betreff des Beitrags: | Re: nächste Datei einladen... ist das wirklich so umständlich |
Hi Tipsi! Ja, nee, die Dateinamen kann ich später nicht wirklich beinflussen. Deshalb überlege ich ob ich nicht Hollwood dahin gehend "austricksen" kann in dem ich die Strings in denen sich die ausgelesene Dateienliste befindet in ein Arry packe und diese dann dort mittels ( sort() ) sortieren lasse. Dann müßte es ja wieder stimmen und dann halt wieder zurück in den String packen. Das Thema wurmt mich doch sehr. Na mal schauen ob ich die Woche etwas Zeit finde. |
Seite 1 von 1 | Alle Zeiten sind UTC |
Powered by phpBB® Forum Software © phpBB Limited Deutsche Übersetzung durch phpBB.de |