JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Mise en colonnes Ven 1 Sep 2017 - 21:20 | |
| C'est plutôt histoire de causer, vu qu'il ne se passe pas grand chose ici en ce moment... Voilà, j'ai eu besoin d'imprimer une liste assez longue d'éléments de texte assez courts. J'ai voulu imprimer la liste sur plusieurs colonnes, pour diminuer l'encombrement (et faciliter la lecture). Bien sûr, on peut faire ça facilement avec un traitement de textes quelconque, mais c'est plus amusant à faire en Panoramic. Contrainte: l'impression se fait avec une police à pas fixe (genre Lucida Console). Avec Notepad par exemple. - Code:
-
LABEL Test DIM rs$,f$,nc%,nlp%,ncl%,eh$,et%,i% ' gosub Test: end rs$ = "C:\TEMP\" f$ = rs$+"Liste.txt" ncl% = 90: ' caractères par ligne nlp% = 78: ' lignes par page et% = 3: ' nb de lignes d'en-tête (non mises en colonnes) eh$ = " | ": ' séparateur de colonnes nc% = 3: ' nombre de colonnes Misfo_col(f$,nc%,ncl%,nlp%,eh$,et%)
EXECUTE_WAIT "Notepad.exe "+rs$+"Page1.txt" END ' ==============================================================================- Test: file_open_write 1,rs$+"Liste.txt" file_writeln 1,"1_ Ceci est l'en-tête, sur 3 lignes" file_writeln 1,"2- ================================" file_writeln 1," 3_ en_tête" for i% = 4 TO 500 file_writeln 1,STR$(i%)+"_ABCDEFGH" next i% file_close 1 RETURN ' ==============================================================================- SUB Misfo_col(f$,nc%,ncl%,nlp%,eh$,et%) ' Mise en forme du fichier texte f$ en colonnes (impression avec Notepad) ' info: pour Notepad (implicite Lucida Console taille 10) ' +-----------+-----------+ ' Police| Lucida C. | Consolas | ' +-----------+-----------+ ' Taille| cpl | nlp | cpl | nlp | ' ------+-----+-----+-----+-----+ ' 8 | 113 | 100 | 125 | 83 | ' 9 | 100 | 87 | 110 | 74 | ' 10 | 90 | 78 | 101 | 68 | ' 11 | 82 | 71 | 90 | 61 | ' 12 | 75 | 65 | 82 | 55 | ' ------+-----------------------+ ' nc% = nombre de colonnes ' ncl% = nb total de caractères par ligne ' nlp% = nb de lignes par page ' eh$ = séquence d'espacement entre colonnes (en caractères) ' et% = nombre de lignes d'en-tête non mises en colonnes ' NB: les lignes trop longues seront repliées. ' =====> Liste des fichiers résultat (fichiers C:\TEMP\Pagex.txt) dans le clipboard DIM_LOCAL rs$,ls%,wc%,a$,b$,i%,j%,c%,db%,pg%,hc% IF LABEL("Pgsui") = 0 THEN LABEL Pgsui rs$ = "C:\TEMP\": ' répertoire des fichiers/pages résultats (Page1 à x.txt) wc% = (ncl%-(nc%-1)*LEN(eh$))/nc%: ' largeur d'une colonne (caractères) ls% = 1000: LIST ls%: HIDE ls% EXECUTE_WAIT "cmd.exe /c DEL /Q "+rs$+"Page*.txt": ' suppression des existants évent. FILE_OPEN_READ 1,f$: FILE_OPEN_WRITE 2,rs$+"Page1.txt" IF et% > 0: ' lignes d'en-tête, non mises en colonnes FOR i% = 1 TO et%: FILE_READLN 1,a$: FILE_WRITELN 2,a$: NEXT i% END_IF WHILE FILE_EOF(1) = 0 FILE_READLN 1,a$ WHILE LEN(a$) > wc% ITEM_ADD ls%,LEFT$(a$,wc%): a$ = RIGHT_POS$(a$,wc%+1) END_WHILE ITEM_ADD ls%,a$ END_WHILE FILE_CLOSE 1 pg% = 0 hc% = nlp%-et%: ' nb de lignes par colonne (1ère page) db% = 1 Pgsui: pg% = pg%+1: IF pg%>1 THEN FILE_OPEN_WRITE 2,rs$+"Page"+STR$(pg%)+".txt" FOR i% = db% TO db%+nlp%-et%-1 IF i%>COUNT(ls%) THEN EXIT_FOR a$ = ITEM_READ$(ls%,i%): IF LEN(a$)<wc% THEN a$ = a$+STRING$(wc%-LEN(a$)," ") FOR c% = 2 TO nc% j% = i%+hc%*(c%-1) IF j%<COUNT(ls%) b$=ITEM_READ$(ls%,j%): IF LEN(b$)<wc% THEN b$=b$+STRING$(wc%-LEN(b$)," ") a$ = a$+eh$+b$ END_IF NEXT c% FILE_WRITELN 2,a$ NEXT i% FILE_CLOSE 2 db% = db%+(nlp%-et%)*nc% et% = 0: hc% = nlp% IF j%<=COUNT(ls%) THEN GOTO Pgsui CLIPBOARD_STRING_COPY STR$(pg%): ' nombre de pages générées -> clipboard DELETE ls% END_SUB ' ============================================================================== L'appel au S/P Test sert à fabriquer un fichier d'essai. Il faut éventuellement modifier le paramètre rs$ (appel et sub), c'est le répertoire de manoeuvre. L'impression se fait depuis Notepad, après affichage de la page voulue. | |
|