Forum Liberty Basic France

Annonces » Ouverture séquentielle des fichiers d'un dossier
Le 07/03/2012 à 03h28

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Salut du matin,j'ai regardé dans la doc.Il y a bien un item "séquentiel" mais c'est assez brumeux. La question est: Peut on appeller,ouvrir,lire,de façon séquentielle (dans l'ordre de rangement de windows) les fichiers d'un dossier. Si quelqu'un a déja fait ça, je serais preneur pour un bout de code. Si cette opportunité n'existe pas encore,il est temps de la créer.J'en ai besoin ! ;) ;) <---La gueule du smiley!
____________________
Roro

   
Le 07/03/2012 à 14h11

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Ta requète est tout aussi brumeuse :siffle

"L'ordre de rangement de windows" comme tu dis peut être la date, le nom, l'extension, etc...

Tout ça est parfaitement possible avec JB/LB.

Voici par exemple ce qu'a écrit Mark Parkinson en 2002, très court car il utilise la récursivité pour lire dans les sous-répertoires potentiels, et commenté en anglais bien sûr : ( mais ne le lance pas car il va tout de suite te lancer la recherche de tous les fichier *.bak sur ton disque C: )

Code VB :
' Mark Parkinson
' 08/10/02

' This program will list all the files in the whole directory structure
' which match the given file spec. A process called recursion is used.

' Feel free to use and adapt the program eg to sum the filespace used or
' delete files or rename files or move them.
' It is also easy to adapt the program to delete empty subdirectories.

 
dim info$(10, 10)  'Ready for the files command.
'Note no backslash - added later on.
placetohunt$="c:"
thingtohuntfor$="*.bak"
 
print "now listing all files in ";placetohunt$;" which match ";thingtohuntfor$
print
 
call recurse placetohunt$, thingtohuntfor$
print
print "finished"
 
end
 
sub recurse pathspec$,mask$
    'Put in the backslash separator.
    pathspec$=pathspec$+"\"
    files pathspec$, mask$, info$(
 
    filecount=val(info$(0, 0))
    subdircount=val(info$(0, 1))
 
for i=1 to filecount
    filename$= pathspec$+info$(i, 0)
    filesize$= info$(i, 1)
    datestamp$=info$(i, 2)
    print filename$;"     ";filesize$
next i
 
'Arrays cannot be local to subs so the subdirs
'are all put in a string separated by *'s which
'can't occur in filenames.
list$=""
for i=1 to subdircount
    list$=list$+pathspec$+info$(f + i, 1)+"*"
next i
 
'The subdirs are now pulled out of the (local)
'string one at a time and the sub is called again.
'This process where a sub calls itself
'is called recursion.
while list$<>""
    p=instr(list$,"*")
    p$=left$(list$,p-1)
    call recurse p$,mask$ 
    list$=mid$(list$,p+1)
wend
 
end sub




Edité par cassiope01 Le 07/03/2012 à 16h35
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 07/03/2012 à 20h20

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Bonjour Cassiope.Dis,tu en as d'autres des textes comme celui de Mark Parkinson ?Si oui,cela vaudrait le coup d'en faire faire un pack et de le mettre à la disposition des pataugeurs comme moi.Tu me parle de 'Tetris'.Je regrette de faire controverse,mais tetris est un jeux de hazard et adresse.Ton jeux de billes en est de hazard et observation.Celui que je décris est de hazard et stratégie.Tout est dans la nuance! .J'essaye d'intégrer au texte de Parkinson une sub de copie, je me casse les dents sur le nom de chemin (synthaxe).S'il te plait, encore une réponse: comment on 'ouvre' un fichier (pas dans une fenetre"Liberty",mais comme 's'execute' le: help.chm avec ton éditeur?) Gros merci pour ton temps et ta patience.



Edité par Roland Le 08/03/2012 à 18h44
____________________
Roro

   
Le 08/03/2012 à 20h51

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Vois la commande 'RUN' dans l'aide de JB.
Mais RUN en lui-même n'execute rien tout seul.
Il lance le logiciel externe à JB que tu lui indiques, qui utilisera le fichier que tu lui donnes en paramètre...

Désolé Roland mais sache que je ne comprend que très peu ce que tu veux faire, tant tes explications dans tous tes posts sont tarabiscotées, compliquées, et partent dans tous les sens...

On trouve énormément de sources sur le forum officiel de JB : ICI
C'est de là que vient le bout de code de Mark par exemple.
Bien sûr il faut un peu comprendre l'anglais, mais je m'en sort le plus souvent avec le traducteur de google...

Le forum de JB dispose aussi d'une énorme base de codes en tout genre : leurs archives.



Edité par cassiope01 Le 08/03/2012 à 21h11
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 08/03/2012 à 21h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Ca y est, j'ai compris. Si je veux ouvrir un fichier texte il faut executer "bloc note".Et pour les htm un navigateur. Et ben heureusement que tu donne des réponses claires à des questions obscures.Je vois que ce qui me parraissait simple, ne l'est pas.Mais cela ne m'empechera pas d'avancer.Je te remercie de ta patience.
____________________
Roro

   
Le 09/03/2012 à 16h57

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Salut Cassiope.Merci pour les deux liens.J'ai trouvé un tétris bien commenté, j'attaque mon jeux en confiance. La traduction de Liberty avance bien.Par contre pour celle de Just Basic: "Maccache houalou".C'est un putain de fichier compilé.Ce qui justifie ton éditeur, dont je ne comprennais pas le besoin. Peut tu me dire pourquoi tu utilise 'Just B' plutot que 'Liberty' qui a la complétion, et une aide trés facile à modifier. Quel avantage ? A la prochaine.
____________________
Roro

   
Le 09/03/2012 à 17h55

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Je suis beaucoup sur le forum JB dont je t'ai donné le lien. Son grand frère, le forum LB me dépasse.
Si les programmes écrits en JB fonctionne à coup sûr avec LB, l'inverse n'est pas forcément vrai.
Donc je reste sur JB et à par quelques trucs comme l'accès direct aux blocks de code dans l'éditeur LB (qui est très pratique j'en conviens), ou des commandes comme eval$() qui n'existent pas avec JB, je n'ai certainement pas atteind ses limites...

C'est pas un dictionnaire que je voulais faire mais plutôt un aide mémoire des syntaxes des commandes JB en français, et quelques exemples éventuellement.
Tu verras que les programmeurs français en JB/LB qui viennent sur ce forum francophone peuvent se compter sur les doigts d'une main.
J'ai laissé tombé.

Et si tu décrivais ton jeu de manière simple mais complète ?

Existe-t-il déjà sur le net ?

@+



Edité par cassiope01 Le 09/03/2012 à 19h31
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 09/03/2012 à 18h45

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Voici un autre Tétris qui ne fait que 11.2 Ko, 380 lignes dont beaucoup de commentaires !

Code VB :
 
'We have a 250x500 pixel playing area, tets are made up of four
    'sprites each of 25x25 pixels. Tetdata() holds the position of
    'each of those sprites for each tet in each particular orientation
    'as an offset from the top left corner. Rotation simply means
    'redrawing the four sprites at their new offsets.
    'The state of play is held in board(col,row) There is an extra
    'row that defines the floor.
    'The board is drawn with a combination of sprite
    'drawing and bmp manipulation. Sprites are used while the
    'tet falls. When it has reached it's resting place the
    'board is grabbed as bmp slices, redrawn without full slices
    'then grabbed as a single large bmp which becomes the background
    'for the next tet to fall down.
    nomainwin
    WindowWidth = 400
    WindowHeight = 600
    UpperLeftX = Int((DisplayWidth - WindowWidth) / 2)
    UpperLeftY = Int((DisplayHeight - WindowHeight) / 2)
    button #main.play,  "New", [play], UL, 270,100,100,20
    button #main.pause, "Pause", [pause], UL, 270,200,100,20
    button #main.help, "Help", [help], UL, 270,300,100,20
    graphicbox #main.g, 10, 20, 252, 502
    textbox #main.score, 270, 40, 100,20
    statictext #main.t, "Score",270,20, 100,20
    Open "Tetris" for Window as #main
    #main, "Trapclose [exit]"
    dim tetdata(360)
    dim board(10,21)
    gosub [setup]
    wait
 
 
    [play]
    'set up board
    redim board(10,21)
    for n= 1 to 10
        board(n,21)=1
    next
    'set current tet off
    if tet>0 then
        for n= 1 to 4
            #main.g "spritevisible s";str$(tet);str$(n);" off"
        next
    end if
    'clear the background
    #main.g "background blue"
    'set the variables
    drop=.01                    'drop speed .01 - 1.0
    temps = 500
    tet=int(rnd(0)*7)+1         'tet shape IJLOSTZ 1-7
    teto=1                      'tet orientation 1=N 2=E 3=S 4=W
    tetx=int(rnd(0)*4)*25+50    'tet starting x 10x25 pixel columns
    tety=-25                    'tet starting y
    score=0
    #main.score score
    'add the x and y offsets for the tet to tetx and tety
    gosub [addoffsets]
    'make it visible
    for n= 1 to 4
        #main.g "spritevisible s";str$(tet);str$(n);" on"
    next
    'set up an event to look for key presses
    #main.g "when characterInput [changemovement]"
    #main.g "setfocus"
 
 
    [move]
    'add the x and y offsets for each tet in it's current orientation
    gosub [addoffsets]
    'position the four sprites at their offsets from tetx,tety
    #main.g "spritexy s";str$(tet);"1 ";x1;" ";y1
    #main.g "spritexy s";str$(tet);"2 ";x2;" ";y2
    #main.g "spritexy s";str$(tet);"3 ";x3;" ";y3
    #main.g "spritexy s";str$(tet);"4 ";x4;" ";y4
    'get the columns and rows the tets occupy
    bx1=int(x1/25)+1
    bx2=int(x2/25)+1
    bx3=int(x3/25)+1
    bx4=int(x4/25)+1
    by1=int(y1/25)+1
    by2=int(y2/25)+1
    by3=int(y3/25)+1
    by4=int(y4/25)+1
    'check if any tet is on the floor, if so stop falling
    if board(bx1,by1+1)=1 or board(bx2,by2+1)=1 or board(bx3,by3+1)=1 or board(bx4,by4+1)=1 then
        'check if any tet is on the top row
        if by1=1 or by2=1 or by3=1 or by4=1 then [gameover]
        'fill in the board array with new positions
        board(bx1,by1)=1
        board(bx2,by2)=1
        board(bx3,by3)=1
        board(bx4,by4)=1
        'draw the tets so we can capture them
        #main.g "drawsprites"
        'grab the board in 20 bmp slices
        for by=1 to 20
            #main.g "getbmp bak";str$(by);" 0 ";by*25-25;" 250 25"
        next
        'now redraw the board in slices
        'remove slices that are full
        bypos=20
        bmpslice=20
        while bypos>0
            'sum the tets in the row
            tot=0
            for bx= 1 to 10
                tot=tot+board(bx,bypos)
            next
            'draw incomplete rows
            if  tot<>0 and tot<10 then
                #main.g "drawbmp bak";str$(bmpslice);" 0 ";bypos*25-25
                bypos=bypos-1
                bmpslice=bmpslice-1
            end if
            'remove completed rows
            if tot=10 then
                'score it
                score=score+100*(21-bypos)
                #main.score score
                'compress the board array
                for z=bypos to 1 step -1
                    for f=1 to 10
                        board(f,z)=board(f,z-1)
                    next
                next
                bmpslice=bmpslice-1
            end if
            'blank out empty rows
            if tot=0 then
                #main.g "drawbmp bak";str$(1);" 0 ";bypos*25-25
                bypos=bypos-1
            end if
        wend
        'grab the new background
        #main.g "getbmp bak 0 0 250 500"
        #main.g "background bak"
        'make the old sprite invisible
        for n= 1 to 4
            #main.g "spritevisible s";str$(tet);str$(n);" off"
        next
        'choose next tet at random
        tet = int(rnd(0)*7+1)
        'return drop to old speed
        if olddrop<>0 then drop = olddrop : olddrop=0
        'make the new sprite visible
        for n= 1 to 4
           #main.g "spritevisible s";str$(tet);str$(n);" on"
        next
        tety=-25
        tetx=int(rnd(0)*4)*25+50
    end if
    'no tet is on the floor so keep falling
    tety=tety+drop
    #main.g "drawsprites"
    'check for keyboard input diverting us to [changemovement]
    scan
 
  '  call paus temps

    goto [move]
 
 
    [pause]
    if pause then
        pause=0
        #main.g "when characterInput [changemovement]"
        #main.g "setfocus"
        goto [move]
    else
        pause=1
       ' #main.g "when characterInput "
        wait
    end if
 
 
    [help]
    h$="Game Controls";chr$(13);"Use left and right to change column,";chr$(13)
    h$=h$+"up to rotate and Spc for a fast drop";chr$(13)
    h$=h$+"+ and - reduces or increases speed";chr$(13)
    notice h$
    wait
 
    [gameover]
    notice "Game Over ";score
    wait
 
    [changemovement]
    w$=Inkey$
    key = asc(right$(w$,1))
    'allow left and right movement
    'if no tets are on the same rows
    if key = _VK_LEFT or key = _VK_RIGHT then
        tot=0
        for bx= 1 to 10
            tot=tot+board(bx,by1+1)
            tot=tot+board(bx,by2+1)
            tot=tot+board(bx,by3+1)
            tot=tot+board(bx,by4+1)
        next
        if key = _VK_RIGHT and tetx+w<250 and tot=0 then tetx=tetx+25
        if key = _VK_LEFT and tetx>=25 and tot=0 then tetx=tetx-25
    end if
    ' rotate the tet through its four orientations
    if key = _VK_UP then
        teto=teto+1
        if teto>4 then teto=1
 
        'reposition tety if height increases
        oldh=h
        gosub [addoffsets]
       ' tety=tety-abs(oldh-h)
        if tety<0 then tety =0
 
        'reposition tetx if width beyond wall
        if tetx+w>250 then
            tetx=250-w
        end if
    end if
    'drop fast
    if key = _VK_DOWN then
    olddrop=drop
    drop=1
    end if
    if lower$(w$) = "p" then [pause]
    'speed up or slow the drop
    if w$ = "1" then drop=drop+.01
    if w$ = "0" then drop=drop-.01
    if drop<.01 then drop =.01
    if drop>1 then drop = 1
 
    goto [move]
 
    sub paus temp
        t=time$("ms")
        t2=t
        while t2<t+temp
            t2=time$("ms")
        wend
    end sub
 
 
    [addoffsets]
    pos=tet*40+teto*10
    x1=tetx+tetdata(pos+0)
    x2=tetx+tetdata(pos+2)
    x3=tetx+tetdata(pos+4)
    x4=tetx+tetdata(pos+6)
    y1=tety+tetdata(pos+1)
    y2=tety+tetdata(pos+3)
    y3=tety+tetdata(pos+5)
    y4=tety+tetdata(pos+7)
    w=tetdata(pos+8)
    h=tetdata(pos+9)
    return
 
    [setup]
    'read tet data
    for t=1 to 7 'tet IJLOSTZ
        for o=1 to 4 'teto 1=N 2=E 3=S 4=W
            read x1
            read y1
            read x2
            read y2
            read x3
            read y3
            read x4
            read y4
            read w
            read h
            pos=t*40+o*10
            tetdata(pos+0)=x1
            tetdata(pos+1)=y1
            tetdata(pos+2)=x2
            tetdata(pos+3)=y2
            tetdata(pos+4)=x3
            tetdata(pos+5)=y3
            tetdata(pos+6)=x4
            tetdata(pos+7)=y4
            tetdata(pos+8)=w
            tetdata(pos+9)=h
        next o
    next t
    'draw the sprite bmps
    #main.g "down ; fill black"
    #main.g "place 0 25"
    for n= 1 to 25
        #main.g "color ";n*10;" 255 255"
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s1 0 0 25 50"
    for n= 1 to 25
        #main.g "color 255 ";n*10;" 255"
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s2 0 0 25 50"
    for n= 1 to 25
        #main.g "color 255 255 ";n*10
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s3 0 0 25 50"
    for n= 1 to 25
        #main.g "color ";n*10;" ";n*10;" 255"
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s4 0 0 25 50"
    for n= 1 to 25
        #main.g "color 255 ";n*10;" ";n*10
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s5 0 0 25 50"
    for n= 1 to 25
        #main.g "color ";n*10;" 255 ";n*10
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s6 0 0 25 50"
    for n= 1 to 25
        #main.g "color ";n*10;" ";n*10;" ";n*10
        #main.g "box ";n;" ";n+25
        #main.g "color darkgray ; box 25 50"
    next
    #main.g "getbmp s7 0 0 25 50"
    'add the sprites
    for t = 1 to 7
        for o = 1 to 4
            #main.g "addsprite s";str$(t);str$(o);" s";str$(t)
            #main.g "spritevisible s";str$(t);str$(o);" off"
        next o
    next t
    'add background
    #main.g "fill blue"
    #main.g "getbmp blue 0 0 250 500"
    #main.g "background blue"
    return
 
    'I
    data 0,0,25,0,50,0,75,0,100,25
    data 0,0,0,25,0,50,0,75,25,100
    data 0,0,25,0,50,0,75,0,100,25
    data 0,0,0,25,0,50,0,75,25,100
    'J
    data 0,0,25,0,50,0,50,25,75,50
    data 25,0,25,25,25,50,0,50,50,75
    data 0,0,0,25,25,25,50,25,75,50
    data 0,0,25,0,0,25,0,50,50,75
    'L
    data 0,0,25,0,50,0,0,25,75,50
    data 0,0,25,0,25,25,25,50,50,75
    data 0,25,25,25,50,25,50,0,75,50
    data 0,0,0,25,0,50,25,50,50,75
    'O
    data 0,0,25,0,0,25,25,25,50,50
    data 0,0,25,0,0,25,25,25,50,50
    data 0,0,25,0,0,25,25,25,50,50
    data 0,0,25,0,0,25,25,25,50,50
    'S
    data 0,25,25,0,25,25,50,0,75,50
    data 0,0,0,25,25,25,25,50,50,75
    data 0,25,25,0,25,25,50,0,75,50
    data 0,0,0,25,25,25,25,50,50,75
    'T
    data 0,0,25,0,50,0,25,25,75,50
    data 0,25,25,0,25,25,25,50,50,75
    data 0,25,25,25,25,0,50,25,75,50
    data 0,0,0,25,0,50,25,25,50,75
    'Z
    data 0,0,25,0,25,25,50,25,75,50
    data 25,0,0,25,25,25,0,50,50,75
    data 0,0,25,0,25,25,50,25,75,50
    data 25,0,0,25,25,25,0,50,50,75
 
    [exit]
    Close #main
    end
 




Edité par cassiope01 Le 09/03/2012 à 18h49
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 09/03/2012 à 21h09

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Resalut,j'ai fait plusieurs organigrames .Mais j'ai du mal.Je viens de la programation séqentielle ou les choses se déroule de façon linéaire,Je ne comprend pas encore trés bien comment fonctionnent vos programmes.j'écris des trucs qui réagissent de façon totalement imprévue pour moi. Je ne lacherai pas prise, mais c'est sur que que je vais raler.Le jeu était sur PS2. Si il n'y a pas grand monde ici c'est à cause de l'aide en anglais,pondue par par des gens que je qualifierai de pas trés charitables.Regarde donc l'exemple donné pour eval$ sur LB. Il y a de quoi décourager le plus hardi. Et le reste est à l'avenant.Tu ne va pas tarder à me voir chez les anglais.Bon W.E.
____________________
Roro

   
Annonces » Ouverture séquentielle des fichiers d'un dossier  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie