IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Basic Discussion :

Comment effectuer un tri dans un fichier à accès direct (random)


Sujet :

Basic

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Sans emploi
    Inscrit en
    Novembre 2017
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2017
    Messages : 46
    Points : 26
    Points
    26
    Par défaut Comment effectuer un tri dans un fichier à accès direct (random)
    Bonjour,

    Je reposte mon sujet car au départ j'avais posé une question tout à fait différente (merci à la personne qui m'avait répondu). En fait, tout est dans mon titre. J'ai créé un fichier à accèd direct (random) sous le nom test de "Fichier.txt". Pour cela j'ai saisi les lignes de code suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Line Input "Nom ? ";N$
    Line Input "Prénom ";PN$
    LNR = 128
    NENR = LOF (1) / LNR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Lset Nom$ = N$
    Lset Prenom$ = PN$
    RANG = NENR
    Put #1, RANG
    Close #1
    Est-ce que quelqu'un pourrait me dire comment classer alphabétiquement par Noms les enregistrements ? Je sais déjà qu'il existe plusieurs méthodes de tri (Shell) entre autres et qu'il faut utiliser un tableau pour effectuer le tri en question.

    Seulement je n'ai pratiquement aucune doc facile et bien expliquée sur le sujet du tri. Je remercie quiconque pourra me donner un exemple facile à mettre en oeuvre.

    Bonne journée !

  2. #2
    Membre à l'essai
    Homme Profil pro
    pc
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : pc

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 18
    Points
    18
    Par défaut classer alphabétiquement
    bonjour orca29

    si vous avez fait des enregistrements dans un fichier à accès séquentie
    ( OPEN "test.txt" FOR APPEND AS #1 )
    pour classer alphabétiquement des enregistrements
    j'ai mi dim(300) pour 300 enregistrement
    le programme basic a une possibilite limite pour ( DIM )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    1 CLS : COLOR 15
    2 DIM a$(300)
    3 zz = 0: NB.Enr% = 0: zz = 1
     
    4 OPEN "test.txt" FOR INPUT AS #1
    5 DO UNTIL EOF(1) = -1
    6 LINE INPUT #1, ligne$
    7 a$(zz) = ligne$
    8 zz = zz + 1
    9 LOOP
    10 CLOSE #1
    11 NB.Enr% = zz - 1
     
    12 FOR a = 1 TO NB.Enr%
    13 PRINT a$(a)
    14 PRINT
    15 NEXT a
     
    16 PRINT
    17 FOR i = 1 TO NB.Enr% - 1
    18 FOR j = i + 1 TO NB.Enr%
    19 IF a$(j) < a$(i) THEN SWAP a$(j), a$(i)
    20 NEXT j
    21 NEXT i
    22 i = 0: j = 0
     
    23 FOR a = 1 TO NB.Enr%
    24 PRINT a$(a)
    25 PRINT
    26 NEXT a
     
    27 OPEN "test1.txt" FOR APPEND AS #2
    28 FOR xx = 1 TO NB.Enr%
    29 PRINT #2, a$(xx)
    30 NEXT xx
    31 xx = 0
    32 CLOSE #2
    33 END

  3. #3
    Membre à l'essai
    Homme Profil pro
    pc
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : pc

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 18
    Points
    18
    Par défaut info fichier
    bonjour Eric
    Mon prénom est jean jacques et habite en belgique
    mais connais l'informatique en année 1996
    connais sur t.r.s mode 1 et 2 et 3 et 16
    sur commodore 64 et 128
    sur amiga 1200 et 2000 et 4000
    je suis sur un pc avec windows
    j'utilise qbasic 4.5 et qbasic 7.1
    vous pouvez Téléchargement sur www.quickbasic.free.fr
    les versions de qbasci son en winrar il faudra décompresse

    c'set une version pour mac
    vous devez faire ceci d'abord

    programme test0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CLS : COLOR 15
    OPEN "test0.txt" FOR APPEND AS #9
    CLOSE #9
    puis run
    sa donne un fichier vide
    fin

    maintenant vous pouvez demarre le programe 1

    programme 1 est fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    CLS : COLOR 15: DIM a$(300)
    zz = 0
    OPEN "test0.txt" FOR INPUT AS #1
    DO UNTIL EOF(1) = -1
    LINE INPUT #1, ligne$
    zz = zz + 1: a$(zz) = ligne$
    LOOP
    CLOSE #1
    10 REM
    11 CLS
    PRINT "PROGRAMM DE FICHIER"
    PRINT
    PRINT "IL Y A"; zz; "FICHIERS ENREGISTRER"
    PRINT
    PRINT "SUR 300 FICHIER AU MAXIMUN"
    PRINT : PRINT
    PRINT "AJOUTER UN FICHIERS pousse sur ( a )"
    PRINT
    PRINT "FIN DE PROGRAMME    pousse sur ( f )"
    20 REM
    q$ = "": q$ = INKEY$
    IF q$ = "" THEN 20
    IF q$ = "a" OR q$ = "A" THEN 100
    IF q$ = "f" OR q$ = "F" THEN 200
    IF q$ = "p" THEN END
    GOTO 20
    END
    100 IF nu >= 300 THEN 11
    CLS
    PRINT "PROGRAMM DE FICHIER"
    PRINT
    PRINT "IL Y A"; zz; "FICHIERS ENREGISTRER"
    PRINT
    INPUT "Nom    : "; nom$
    INPUT "Prenom : "; prenom$
    zz = zz + 1: a$(zz) = nom$ + "*" + prenom$
    PRINT
    PRINT "pousse sur entree"
    110 w$ = "": w$ = INKEY$
    IF w$ = CHR$(13) THEN 11
    GOTO 110
    200 REM
    IF zz = 0 THEN END
    FOR i = 1 TO zz - 1
    FOR j = i + 1 TO zz
    IF a$(j) < a$(i) THEN SWAP a$(j), a$(i)
    NEXT j
    NEXT i
    i = 0: j = 0
    KILL "test0.txt"
    SLEEP 1
    OPEN "test0.txt" FOR APPEND AS #2
    FOR ii = 1 TO zz
    PRINT #2, a$(ii)
    NEXT ii: ii = 0
    CLOSE #2
    END
    il y a programme 2 j'ai pas fini

  4. #4
    Membre à l'essai
    Homme Profil pro
    pc
    Inscrit en
    Novembre 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : pc

    Informations forums :
    Inscription : Novembre 2015
    Messages : 15
    Points : 18
    Points
    18
    Par défaut info
    programme 2 est fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    CLS : COLOR 15
    DIM a$(300, 3)
    zz = 0: NB.Enr% = 0: zz = 1
    OPEN "test0.txt" FOR INPUT AS #3
    DO UNTIL EOF(3) = -1
    LINE INPUT #3, ligne$
    a$(zz, 1) = ligne$
    zz = zz + 1
    LOOP
    CLOSE #3
    NB.Enr% = zz - 1
    GOSUB 150
    10 CLS
    PRINT "PROGRAMME DE FICHIERS"
    PRINT
    PRINT "IL Y A"; NB.Enr%; "FICHIERS ENREGISTER"
    PRINT
    PRINT "SUR 300 FICHIER AU MAXIMUN"
    PRINT
    PRINT "AFICHAGE UN FICHIER       pousse sur ( 1 )"
    PRINT
    PRINT "AFFICAGE TOUT LES FICHIES pousse sur ( t )"
    PRINT
    PRINT "FIN DE PROGRGRAMME        pousse sur ( f )"
    20 q$ = "": q$ = INKEY$
    IF q$ = "f" OR q$ = "F" THEN END
    IF q$ = "1" THEN 300
    IF q$ = "t" OR q$ = "T" THEN 200
    GOTO 20
    END
    150 REM
    FOR ww = 1 TO NB.Enr%
    ui = 0: ui = LEN(a$(ww, 1))
    'PRINT a$(ww, 1)
    FOR kk = 1 TO LEN(a$(ww, 1))
    IF MID$(a$(ww, 1), kk, 1) = "*" THEN GOSUB 100
    NEXT kk
    NEXT ww
    RETURN
    END
    100 REM
    a$(ww, 2) = MID$(a$(ww, 1), 1, kk - 1)
    a$(ww, 3) = MID$(a$(ww, 1), kk + 1, ui)
    RETURN
    END
    200 CLS
    PRINT "IL Y A"; NB.Enr%; "FICHIERS ENREGISTER"
    PRINT
    FOR a = 1 TO NB.Enr%
    PRINT "nom    : "; a$(a, 2)
    PRINT "pernom : "; a$(a, 3)
    PRINT
    PRINT "pousse sur entree"
    210 xy$ = "": xy$ = INKEY$
    IF xy$ = CHR$(13) THEN 220
    GOTO 210
    220 PRINT
    NEXT a
    a = 0: xx = 0: GOTO 10
    END
    300 REM
    CLS
    PRINT "IL Y A"; NB.Enr%; "FICHIERS ENREGISTER"
    PRINT
    PRINT "écrire les trois premiere lettre de nom que vous rechercher ";
    INPUT nom$
    PRINT : PRINT
    hh = 0
    FOR a1 = 1 TO NB.Enr%
    vop$ = a$(a1, 2) + " " + a$(a1, 3)
    IF MID$(vop$, 1, 3) = nom$ THEN hh = 0: hh = 1: GOSUB 400
    IF hh = 0 THEN 500
    NEXT a1
    GOTO 10
    END
    400 REM
    PRINT "nom    : "; a$(a1, 2)
    PRINT "pernom : "; a$(a1, 3)
    PRINT
    PRINT "pousse sur entree"
    410 xy$ = "": xy$ = INKEY$
    IF xy$ = CHR$(13) THEN 420
    GOTO 410
    420 PRINT
    RETURN
    END
    500 REM
    CLS
    PRINT
    PRINT "PAS DE FICHER AVEC LE NOM "; nom$
    PRINT
    PRINT "pousse sur entree"
    510 xy$ = "": xy$ = INKEY$
    IF xy$ = CHR$(13) THEN 520
    GOTO 510
    520 GOTO 10

  5. #5
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 130
    Points
    130
    Par défaut Tri d'un fichier
    Bonjour à tous,
    J'ai créé un assembleur désassembleur pour le microprocesseur 6809 sous Visual Basic 4.0.
    Tout le déroulement du programme se passe bien, sauf qu'à la fin, lors du tri des divers fichiers le programme se fige.

    Seul le mouvement de la souris permet que continuer et de finir le déroulement du programme.

    J'ai essayé de mettre des DoEvents dans le source mais rien n'y fait.

    voici mon programme de tri

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub SM_TriFicEtiquettes()
            Dim Ne              As Long
            Dim NuE             As Long
            Dim NuEDec          As Long
            Dim Dec             As Long
            Dim Ecart           As Long
            Dim Incr            As Long
     
            Dim Texte           As String
            Dim texteDec        As String
     
            Call SL_OpenFicEtiquettes
            DoEvents
     
     
            Ne = g_NbEnregFicEtiquettes
            Dec = Ne
    TriFicEtiquettesDeb:
            Dec = Int(Dec / 2)
            If Dec < 1 Then
                GoTo TriFicEtiquettesFin
            End If
            Incr = 1
            Ecart = Ne - Dec
    TriFicEtiquettesSuite:
            DoEvents
            NuE = Incr
    TriFicEtiquettesTest:
            NuEDec = NuE + Dec
            Get #g_NumFicEtiquettes, NuE, StructFicEtiquettes
            Get #g_NumFicEtiquettes, NuEDec, StructFicEtiquettesDec
            Texte = Trim$(StructFicEtiquettes.Nom)
            texteDec = Trim$(StructFicEtiquettesDec.Nom)
            DoEvents
     
            If Texte > texteDec Then
                Put #g_NumFicEtiquettes, NuE, StructFicEtiquettesDec
                Put #g_NumFicEtiquettes, NuEDec, StructFicEtiquettes
                NuE = NuE - Dec
                If NuE < 1 Then
                    GoTo TriFicEtiquettesIncr
                Else
                    GoTo TriFicEtiquettesTest
                End If
            End If
    TriFicEtiquettesIncr:
            DoEvents
            Incr = Incr + 1
            If Incr > Ecart Then
                GoTo TriFicEtiquettesDeb
            Else
                GoTo TriFicEtiquettesSuite
            End If
    TriFicEtiquettesFin:
            DoEvents
     
            Close #g_NumFicEtiquettes
     
    End Sub
    Cela fait quelques jours que j'essaye diverses solutions sans résultats.
    Pouvez vous m'aider.
    Bonne journée
    Richard

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/08/2018, 10h56
  2. Réponses: 13
    Dernier message: 09/11/2011, 12h06
  3. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06
  4. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42
  5. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo