AMIGA-RESISTANCE

Die Projektseite für alles rund um den Amiga
Aktuelle Zeit: 28 Mär 2024, 22:28

Alle Zeiten sind UTC


 

 

 



Ein neues Thema erstellen  Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 07 Jul 2012, 13:17 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
Hallo
Bin mit meinem kleinen Programm nun endlich mal weiter gekommen :D
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 :help:


Nach oben
   
BeitragVerfasst: 08 Jul 2012, 16:37 
Offline
Administrator
Benutzeravatar

Registriert: 30 Aug 2005, 19:42
Beiträge: 5303
Postleitzahl: 46047
Land: Deutschland
Wohnort: 46047 Oberhausen
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 :?:

_________________
Gruß Helmut
Amiga 2000, Amiga 500, Amiga One XE, Amiga One X5000


Nach oben
   
BeitragVerfasst: 08 Jul 2012, 19:54 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
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.


Nach oben
   
BeitragVerfasst: 09 Jul 2012, 11:44 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli root
Zitat:
...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 ...
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
Damit arbeitest Du Schritt für Schritt jeden Dateinamen
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


Nach oben
   
BeitragVerfasst: 23 Jul 2012, 15:55 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
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
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  
vorher wird beim öffnen einer Datei noch

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:
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    
Ich hab mal versucht auf die Schnelle meinen Code etwas zu dokumentieren (sollte ich mir mal genrel angewöhnen).
Jetzt muß ich das nur noch schaffen das ich per Tastendruck nicht über das Listenende hinaus lese.


Nach oben
   
BeitragVerfasst: 24 Jul 2012, 16:30 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
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:

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
Oder Du notierst Dir den ErrorCode, den
Hollywood ausspuckt, wenn das Ende
der Liste überschritten wird und fragst
spezifisch diese Fehlernummer ab:
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
Griessli
Tipsi


Nach oben
   
BeitragVerfasst: 24 Jul 2012, 18:09 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
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 :shock:
Das abschalten von den Errorhandler hatte ich sowieso vor und nu weis ich auch gleich wie :top:


Nach oben
   
BeitragVerfasst: 24 Jul 2012, 20:50 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
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


Nach oben
   
BeitragVerfasst: 28 Jul 2012, 17:52 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
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.


Nach oben
   
BeitragVerfasst: 29 Jul 2012, 08:00 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
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


Nach oben
   
BeitragVerfasst: 29 Jul 2012, 20:54 
Offline
Alter Hase
Benutzeravatar

Registriert: 17 Apr 2009, 08:53
Beiträge: 77
Postleitzahl: 0
Land: Deutschland
Wohnort: Berlin
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.


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 11 Beiträge ] 

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Gehe zu: 

cron