Je ferme les yeux pour mieux respirer.
Valéry Giscard d'Estaing
Magic 500 n'est que le jeu où l'on devine un nombre, après essais successifs (trop grand, trop petit...)
Développé par les membres de Microloges, le club d'informatique de Beaumetz les loges, Magic 500 présente l'interêt d'offrir des sources quickbasic qui peuvent servir d'exemples aux débutants...
Le fichier principal:
DECLARE SUB jeu (moinsbon!)
DECLARE SUB regle ()
DECLARE SUB beethov ()
DECLARE SUB init (e$)
DECLARE SUB texte (a$, li!, co!, couleur!, t$)
DECLARE SUB espace (w!)
DECLARE SUB elise ()
CONST nbnb = 5 'nb de nb à trouver
CONST nbch = 3 'nb de chiffre à trouver
CONST nbenr = 30
TYPE sov
chnom AS STRING * 20
chnbes AS INTEGER
END TYPE
DIM joueur AS sov
joueur.chnom = "Adam"
' Page de garde...
'__________________________________________________
DO
WIDTH 40, 25
CLS
texte "MICRoLoGES", 12, 5, 3, "non"
elise
texte "PRESENTE:", 14, 10, 4, "oui"
CLS
texte " M A G I C 5 0 0", 12, 1, 5, "non"
SLEEP 2
'_______________________________________________
'page 2
WIDTH 80, 50
CLS
OPEN "score.wou" FOR RANDOM AS #1 LEN = LEN(joueur)
i = 1
texte "MEILLEURS SCORES", 1, 25, 2, "non"
texte "NOM", 5, 15, 3, "non"
texte "ESSAIS", 5, 50, 3, "non"
max = LOF(1) / LEN(joueur)
IF max > nbenr THEN max = nbenr
FOR i = 1 TO max
GET #1, i, joueur
LOCATE 7 + i, 2
COLOR 1
PRINT i
LOCATE 7 + i, 15
PRINT joueur.chnom
LOCATE 7 + i, 50
COLOR 5
PRINT joueur.chnbes
NEXT
CLOSE #1
moinsbon = joueur.chnbes
IF moinsbon = 0 OR max < nbenr THEN moinsbon = 9999
LOCATE 50, 35
COLOR 2
PRINT "J";
COLOR 1
PRINT "ouer/";
COLOR 2
PRINT "R";
COLOR 1
PRINT "ègles/";
COLOR 2
PRINT "Q";
COLOR 1
PRINT "uitter";
DO
init e$ 'on initialise la liste de nb aleatoires
LOOP UNTIL INSTR("jJrRqQ", e$) > 0 AND e$ <> ""
SELECT CASE UCASE$(e$)
CASE "J"
jeu moinsbon
CASE "Q"
fin$ = "oui"
CASE "R"
regle
END SELECT
LOOP UNTIL fin$ = "oui"
SUB jeu (moinsbon)
DIM joueur AS sov
DIM j AS sov
CLS
WIDTH 80, 50
BEEP
FOR no = 1 TO nbnb
nbcach = INT(RND * 9 * 10 ^ (nbch - 1)) + 10 ^ (nbch - 1)
DO
essai = essai + 1
PRINT
COLOR 3
PRINT "Encore "; nbnb - no + 1; "nombre";
IF nbnb - no + 1 > 1 THEN PRINT ("s");
PRINT " ...trouver. ";
COLOR 3
PRINT " Essai nø ";
COLOR 4
PRINT essai;
COLOR 3
PRINT " > ";
t = 0
FOR y = 1 TO nbch
t$ = ""
DO
t$ = INKEY$
LOOP UNTIL INSTR("0123456789q", t$) > 0 AND t$ <> ""
IF t$ = "q" THEN STOP
PRINT t$;
t = t * 10 + VAL(t$)
t$ = ""
NEXT y
IF t > nbcach THEN PRINT " trop grand "
IF t < nbcach THEN PRINT " trop petit "
LOOP UNTIL t = nbcach
COLOR 4
PRINT " BRAVO !"
IF no <nbnb THEN elise ELSE beethov
espace (5)
NEXT no
PRINT " Mission accomplie !"
SLEEP 3
' ici on regarde le score et on le sauve si il est bon
IF essai < moinsbon THEN
PRINT " Bravo ! Vous entrez dans le top "; nbenr
PRINT
BEEP
INPUT "Entrez votre nom : "; nom$
OPEN "score.new" FOR RANDOM AS #2 LEN = LEN(joueur)
OPEN "score.wouf" FOR RANDOM AS #1 LEN = LEN(joueur)
ok$ = "non"
i2 = 0
max = LOF(1) / LEN(joueur)
IF max = 0 THEN
ok$ = "oui"
j.chnom = nom$
j.chnbes = essai
i2 = i2 + 1
PUT #2, i2, j
END IF
FOR i = 1 TO max
GET #1, i, joueur
IF (essai < joueur.chnbes OR joueur.chnbes = 0) AND ok$ = "non" THEN
ok$ = "oui"
j.chnom = nom$
j.chnbes = essai
i2 = i2 + 1
PUT #2, i2, j
END IF
i2 = i2 + 1
PUT #2, i2, joueur
NEXT
IF ok$ = "non" THEN
ok$ = "oui"
j.chnom = nom$
j.chnbes = essai
i2 = i2 + 1
PUT #2, i2, j
END IF
CLOSE #2
CLOSE #1
KILL "score.wou"
NAME "score.new" AS "score.wou"
END IF
END SUB
SUB regle
WIDTH 40, 25
CLS
texte "Règles", 5, 10, 5, "non"
texte "du jeu", 5, 23, 5, "oui"
espace (5)
COLOR 4
PRINT "Il s'agit de découvrir ";
PRINT nbnb;
PRINT " nombres cachés en dépensant"
PRINT "le moins d'essais possibles."
PRINT
PRINT " Les nombres sont des entiers de "; nbch; " chiffres"
PRINT
PRINT " plus petit, ou plus grand"
PRINT "seront mes seules indications"
PRINT
texte "BONNE CHANCE", 23, 12, 3, "oui"
LOCATE 25, 10
COLOR 4
PRINT " presser une touche";
SLEEP
END SUB
Et ce fichier externe, comme un "include"...
SUB beethov
ECOUTE$ = "T180 o2 P2 P8 L8 GGG L2 E-"
SUITE$ = "P24 P8 L8 FFF L2 D"
PLAY ECOUTE$ + SUITE$
END SUB
SUB elise
PLAY ON
lise$ = "o3 L8 E D+ E D+ E o2 B o3 D C L2 o2 A"
PLAY "MB X" + VARPTR$(lise$)
END SUB
SUB espace (w)
FOR i = 1 TO w
PRINT
NEXT
END SUB
SUB init (e$)
DO
e$ = INKEY$
z = z + 1
LOOP UNTIL e$ <> ""
RANDOMIZE (z)
END SUB
SUB texte (a$, li, co, couleur, t$)
LOCATE li, co
COLOR couleur
FOR i = 1 TO LEN(a$)
PRINT (MID$(a$, i, 1)); " ";
IF t$ = "oui" THEN SLEEP 1
NEXT
END SUB
Quick Basic est téléchargeable: qb45fr.zip
Un autre exemple sur Wikipedia: Exemple de programme sous Qbasic

Nous avons tous vécu ce moment : vous cherchez une ligne de code précise, un mot-clé dans un rapport, ou une erreur dans un fichier de log. Vous ouvrez l’explorateur de fichiers, vous tapez votre mot-clé dans la barre de recherche et... vous attendez. La petite barre verte progresse avec la lenteur d'un escargot fatigué, pour finalement vous répondre : "Aucun élément ne correspond à votre recherche".
C’est frustrant, n’est-ce pas ? C’est parce que vous utilisez des outils conçus pour la bureautique "grand public", pas pour la performance. Sur Linux, il existe une arme de destruction massive contre l’oubli et le désordre : grep.
Passer à grep, c’est comme quitter un vélo d’appartement pour une Formule 1. Là où une interface graphique (Windows) doit charger des icônes, des aperçus et gérer chaque clic de souris, grep (pour Global Regular Expression Print) va directement à l'essentiel : le texte brut.
Sous Linux, le système ne se pose pas de questions existentielles. Vous lui demandez de trouver une aiguille dans une botte de foin de 5 Go ? Il le fait en quelques millisecondes. Pourquoi ? Parce qu’en ligne de commande, il n’y a pas de "gras". C’est une communication directe avec le processeur. Maîtriser grep, c’est réaliser que la souris est souvent le frein principal de votre productivité.
Pas besoin d'un doctorat en informatique pour utiliser grep. La syntaxe de base est d'une simplicité désarmante :
grep "ce_que_je_cherche" nom_du_fichier
-i : Ignore la casse (il trouvera "ERREUR", "Erreur" ou "erreur").-r : Recherche récursive (il fouille dans tous les dossiers et sous-dossiers).-n : Affiche le numéro de la ligne (pour savoir exactement où aller dans votre éditeur).-v : Inverser la recherche (affiche tout, sauf ce que vous cherchez).Exemple concret :
grep -rn "API_KEY" .Traduction : "Cherche-moi le texte 'API_KEY' dans tout le projet actuel et dis-moi précisément à quelles lignes il se trouve."
C’est ici que Linux devient véritablement addictif. Sous Windows, chaque logiciel travaille dans son coin. Sous Linux, on fait travailler les outils ensemble grâce au "Pipe" (le symbole |, obtenu avec Alt Gr + 6 sur un clavier AZERTY).
Imaginez le "Pipe" comme un tunnel. Vous envoyez le résultat d'une première commande dans le tunnel, et grep l'attend à la sortie pour le filtrer.
Pour lister vos fichiers en ligne de commande, on utilise ls. Si vous avez 2000 fichiers dans un dossier, la liste va défiler trop vite pour vos yeux. Mais si vous tapez : ls | grep "facture"
Le système liste tout, l'envoie dans le "tunnel", et grep ne vous affiche à l'écran que les lignes qui contiennent le mot "facture". C'est instantané.
Et si vous voulez enregistrer ce résultat ? Pas besoin de copier-coller dans un Bloc-notes. Utilisez la flèche de redirection > : ls | grep "2023" > fichiers_archives.txt
En une fraction de seconde, vous venez de créer un fichier texte contenant la liste exacte de vos documents de 2023. Essayez de faire ça aussi vite avec un clic droit.
Lorsqu’on commence à manipuler de gros volumes de données, rechercher un mot unique atteint vite ses limites.grep permet d’aller plus loin en utilisant un fichier de motifs, ce qui transforme une simple recherche en un véritable outil de filtrage automatisé.
Le principe est simple : placer tous les mots ou expressions à rechercher dans un fichier texte, un motif par ligne, puis demander à grep de s’appuyer sur cette liste.
Créons un fichier motifs.txt :
error
warning
critical
Chaque ligne représente un critère de recherche indépendant.
Pour extraire depuis un fichier de log uniquement les lignes correspondant à ces critères :
grep -f motifs.txt journal.log > extraction.log
-f indique à grep d’utiliser un fichier comme source de motifsjournal.log est le fichier analysé> redirige le résultat vers un nouveau fichierLe fichier extraction.log ne contiendra que les lignes pertinentes, prêtes à être relues, archivées ou analysées.
Ignorer la casse :
grep -i -f motifs.txt journal.log > extraction.log
Ajouter les résultats à un fichier existant :
grep -f motifs.txt journal.log >> extraction.log
Ces options permettent d’ajuster la commande sans en modifier la logique.
Cette approche est particulièrement utile pour :
grep dans des scripts Bash ou des pipelines.En combinant listes de motifs, redirections et options, grep cesse d’être un simple outil de recherche pour devenir un véritable moteur de tri en ligne de commande.
Si vous êtes sur macOS, félicitations : ouvrez votre Terminal, grep est déjà là.
Si vous êtes sur Windows, vous avez plusieurs options pour goûter à cette puissance :
C'est là le piège : une fois que vous aurez goûté à grep, vous réaliserez que ce n'est qu'un échantillon gratuit. Le vrai plaisir, c'est d'avoir tout l'écosystème Linux qui va avec.
grep n’est pas qu’une simple commande de recherche. C’est une philosophie. C’est l’idée que l’ordinateur est là pour exécuter des ordres précis et instantanés, pas pour vous faire deviner où il a rangé vos données.
Apprendre à utiliser grep, c’est faire le premier pas vers l’automatisation. Le risque ? C'est qu'après une semaine d'utilisation, vous ne supportiez plus d'attendre la petite loupe de Windows et que vous finissiez par installer Linux pour de bon. Vous êtes prévenus.
Vous souhaitez franchir le pas ou approfondir votre maîtrise de la ligne de commande ? Voici quelques pistes essentielles :
Allhtml est plus qu'un site, c'est une communauté de passionnés en développement web.
Sur le site de Wouf, AllHtml est accéssible en cliquant sur liens puis "plus"