Autore Topic: Numero massimo di caratteri nella riga della console  (Letto 620 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #1 il: 29 Agosto 2020, 16:30:42 »
Ho pensato che la raccolta dei dati dalle impostazioni IDE (settings) potesse funzionare, ma qui non funziona.
Sembra che panProject.width sia sottostimato, magari per via di altri contenitori, margini, spazi ecc.
Forse aggiungendo una certa percentuale?  :-\
Bisognerebbe tenere anche conto di panDebug=True
(Sembre che la ML non funzioni non riesco a inviare)


Codice: [Seleziona]
' Gambas module file

'' Nota occorre attivare il componente gb.gui o gb.gui.qt

Public Sub Main()
  ' Il programma va a leggere in settings della IDE i seguenti valori:
  ' [FMain]
  ' Geometry=[0,0,1854,1017,0]
  ' panProject=[False,297,True]
  ' panProperty=[False,357,True]
  ' panDebug=[False,112,True]
  ' FixedFont="Monospace,10"
  ' Se i pannelli sono attivi restituiscono False
 
  '' NOTA: panDebug se è True significa che la finestra di debug è fluttuante
  '' ATENZIONE che il codice non ne tiene conto.
  Dim sPrint As String = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum."
  Dim sConf, sFont As String
  Dim aConf As String[]
  Dim i, iWidth, iProject As Integer
  Dim hFont As Font
 
  If Exist("~/.config/gambas3/gambas3.conf") Then
    sConf = File.Load("~/.config/gambas3/gambas3.conf")
    If sConf Then
      aConf = Split(sConf, "\n", Null, True)
      i = aConf.Find("[FMain]")
      If i <> -1 Then
        iWidth = Val(Scan(aConf[i + 1], "*,*,*,*,*")[2])
        Print iWidth
        'Stop
        If Scan(aConf[i + 4], "*[[]*,*")[1] = "False" Then
          If Scan(aConf[i + 2], "*[[]*,*")[1] = "False" Then
            iProject = Val(Scan(aConf[i + 2], "*[[]*,*,*")[2])
            Print iProject
            iProject += (iProject * 40 / 100)
            Print iProject
            iWidth -= iProject
          Endif
        Endif
      Endif
      i = aConf.Find("FixedFont*", gb.Like)
      If i <> -1 Then
        'sFont = UnQuote(Scan(aConf[i], "*=*")[1])
        sFont = Scan(aConf[i], "*\"*\"")[1]
        hFont = Font[sFont]
      Endif
    Endif
  Endif
  aConf = RowsPrint(sPrint, iWidth, hFont)
  For Each sConf In aConf
    Print sConf
    Print
  Next

End

Private Function RowsPrint(value As String, iWidth As Integer, hFont As Font) As String[]

  Dim i As Integer
  Dim ss As String[]
  Dim rr As New String[]
  Dim sRow As String

  ' Se la scrtta è più corta della console restituisce tutta la scritta
  If hFont.TextWidth(value) < iWidth Then
    rr.Push(value)
    Return rr
  Endif
  ' Divide la scritta per parole e aggiungendole a sRow una alla volta e controlla la lunghezza.
  ' Se la scritta è più lunga, toglie l'ultima parola e la passa come nuova riga a un vettore.
  ' sRow riparte dalla parola tolta alla riga.
  ss = Split(value, " ")
  For Each s As String In ss
    sRow &= s & " "
    If hFont.TextWidth(sRow) > iWidth Then
      sRow = RTrim(Replace(sRow, s, ""))
      rr.Push(sRow)
      sRow = s & " "
    Endif
  Next
  Return rr

End

Ora il codice è commentato e spero sia più comprensibile, scusate.

 :ciao:
« Ultima modifica: 30 Agosto 2020, 10:26:34 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #2 il: 29 Agosto 2020, 17:01:32 »
Per coloro che leggono la prima volta questa discussione:

Ho posto una domanda nella MailingList ufficiale di Gambas per sapere quale sia (...se vi è) nella console dell'IDE di Gambas (utilizzabile in particolare quando si redigono i codici dei nostri progetti) il numero massimo di caratteri stampabili senza che il testo, ivi stampato, continui automaticamente alla riga successiva in basso.



Per Gianluigi:

1) Puoi spiegare il ragionamento di quanto hai scritto ?
2) provando il tuo codice viene sollevato l'errore " Identificatore sconosciuto: Font " nel terzo parametro della funzione  "RowsPrint()". Devi tenere conto che la mia domanda è riferita sempllicemente a un'applicazione a riga di comando ! Chi vuole testare il codice di Gianluigi con un'applicazione non-grafica dovrà attivare il Componente gb.gui.qt.
3) Ad ogni modo, provando il codice, mi restituisce il numero esorbitante di 1198; laddove, invece, il numero massimo nella mia console di caratteri contenibili tale, che essi non vadano ad occupare anche la riga successiva sottostante, è 147 (numero verificato empiricamente !).
« Ultima modifica: 29 Agosto 2020, 17:24:15 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #3 il: 29 Agosto 2020, 18:04:46 »
Per coloro che leggono la prima volta questa discussione:

Ho posto una domanda nella MailingList ufficiale di Gambas per sapere quale sia (...se vi è) nella console dell'IDE di Gambas (utilizzabile in particolare quando si redigono i codici dei nostri progetti) il numero massimo di caratteri stampabili senza che il testo, ivi stampato, continui automaticamente alla riga successiva in basso.



Per Gianluigi:

1) Puoi spiegare il ragionamento di quanto hai scritto ?
L'IDE salva i suoi dati in Settings, ho pensato che andando a leggere le misure salvate li si potesse ottenere la larghezza della console
Citazione
2) provando il tuo codice viene sollevato l'errore " Identificatore sconosciuto: Font " nel terzo parametro della funzione  "RowsPrint()". Devi tenere conto che la mia domanda è riferita sempllicemente a un'applicazione a riga di comando ! Chi vuole testare il codice di Gianluigi con un'applicazione non-grafica dovrà attivare il Componente gb.gui.qt.
Prova a cambiare questo codice:
Codice: [Seleziona]
'sFont = UnQuote(Scan(aConf[i], "*=*")[1])
        ' IN
        sFont = Scan(aConf[i], "*\"*")[1]
Probabilmente non funziona UnQuote
Giusto ,che scemo, occorre spuntare gb.gui o gb.gui.qt
Citazione
3) Ad ogni modo, provando il codice, mi restituisce il numero esorbitante di 1198; laddove, invece, il numero massimo nella mia console di caratteri contenibili tale, che essi non vadano ad occupare anche la riga successiva sottostante, è 147 (numero verificato empiricamente !).
147  :o stiamo parlando di pixel non di caratteri cosa usi un cellulare  ;D
Mi sa che hai empiricato male
Il codice misura la larghezza della riga...
« Ultima modifica: 29 Agosto 2020, 18:15:49 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #4 il: 29 Agosto 2020, 19:40:19 »
Ho commentato il codice, spero sia più comprensibile.
Ho aggiunto un 40% alla larghezza del pannello progetto prima di sottrarlo alla larghezza della finestra della IDE.

Come spiegato funziona (si fa per dire) solo se la console si trova all'interno dell'area di debug, perchè non ho incluso il codice per gestirla.
Volendo gestirla basta ricavare la larghezza di FOutput e quella è la larghezza della console fluttuante.

 :ciao:

P.S. Ha risposto ora Benoit Minisini e pare basti leggere la proprietà File.Out.Term.Width  ;D
« Ultima modifica: 29 Agosto 2020, 19:43:34 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #5 il: 29 Agosto 2020, 20:19:19 »
147  stiamo parlando di pixel non di caratteri

Questo numero è il numero di caratteri al quale sono giunto empiricamente, ossia usando questa riga di comando:
 
Codice: [Seleziona]
Print String(147, "=")
Se io ne metto uno solo di più, la riga continua automaticamente alla riga successiva sottostante.



P.S. Ha risposto ora Benoit Minisini e pare basti leggere la proprietà File.Out.Term.Width
Bene.
......ed infatti a me il valore restituito da quella Proprietà è... 147 !
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #6 il: 30 Agosto 2020, 02:48:20 »
Ad ogni modo ho verificato che relativamente al contenuto del file " .../.config/gambas3/gambas3.conf ", il valore espresso nel secondo elemento dell'array " panProject " (a me è: panProject=[False,168,True], rappresenta in pixel la larghezza minima predefinita del riquadro sinistro dell'IDE (che può essere disattivato e riattivato premendo F10 oppure cliccando susottomenu "Visualizza-->Progetto").
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #7 il: 30 Agosto 2020, 10:10:47 »
Ad ogni modo ho verificato che relativamente al contenuto del file " .../.config/gambas3/gambas3.conf ", il valore espresso nel secondo elemento dell'array " panProject " (a me è: panProject=[False,168,True], rappresenta in pixel la larghezza minima predefinita del riquadro sinistro dell'IDE (che può essere disattivato e riattivato premendo F10 oppure cliccando susottomenu "Visualizza-->Progetto").

No non è così, purtroppo il progetto aperto non registra i cambiamenti nel config di gambas3, per leggere i cambiamenti apportati occorre, dopo aver apportato i cambiamenti, chiudere e riaprire il progetto per poter leggere i nuovi dati.
Oppure occorrerebbe trovare il modo di ricaricare l'IDE.

Se provi questo codice, apporti i cambiamenti, chiudi e riapri, te ne rendi conto.
Al solito con gb.gui o gb.gui.qt spuntati

Codice: [Seleziona]
' Gambas module file

Public Sub Main()

  ' [FMain]
  ' Geometry=[0,0,1854,1017,0]
  ' panProject=[False,297,True]
  ' panProperty=[False,357,True]
  ' panDebug=[False,112,True]
  ' FixedFont="Monospace,10"

  Dim sConf As String
  Dim aConf As String[]
  Dim i As Integer

  If Exist("~/.config/gambas3/gambas3.conf") Then
    '' Nota: Se avete variato l'ide occorre chiudere e riaprire il progetto
    sConf = File.Load("~/.config/gambas3/gambas3.conf")
    If sConf Then
      aConf = Split(sConf, "\n", Null, True)
      i = aConf.Find("[FMain]")
      If i <> -1 Then
        Print "La larghezza della ide è: "; Space(24); Val(Scan(aConf[i + 1], "*,*,*,*,*")[2])
        Print "La finestra debug è fluttuante = "; Space(17); Scan(aConf[i + 4], "*[[]*,*")[1]
        Print "Il progetto è nascosto = "; Space(25); Scan(aConf[i + 2], "*[[]*,*")[1]
        Print "La laghezza del pannello progetto è "; Space(14); Val(Scan(aConf[i + 2], "*[[]*,*,*")[2])
      Endif
      i = aConf.Find("FixedFont*", gb.Like)
      If i <> -1 Then
        'sFont = UnQuote(Scan(aConf[i], "*=*")[1])
        Print "Il font della console è : "; Space(24); Scan(aConf[i], "*\"*\"")[1]
      Endif
    Endif
  Endif

End
« Ultima modifica: 30 Agosto 2020, 10:23:57 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #8 il: 30 Agosto 2020, 14:50:11 »
No non è così, purtroppo il progetto aperto non registra i cambiamenti nel config di gambas3, per leggere i cambiamenti apportati occorre, dopo aver apportato i cambiamenti, chiudere e riaprire il progetto per poter leggere i nuovi dati.
Sì, dunque quel numero non è predefinito: cambiando la dimensione del pannello del progetto (panProject) e chiudendo il progetto medesimo, poi riaprendolo troveremo il valore del secondo elemento dell'array modificato secondo l'ultima dimensione impostata di quel pannello.

Continuando a fare delle prove empiriche, ho disattivato il pannello del progetto (pannello a sinistra dell'IDE), espandendo così al suo massimo in orizzontale la Console dell'IDE, che nel mio caso corrisponde a 1366 pixel.
L'istruzione File.Out.Term.Width mi restituisce il numero dunque massimo di colonne (quindi di caratteri), stampabili su un unica riga nella Console in base alla sua corrente dimensione, che in tal caso è uguale a 168 colonne (caratteri).
Per cercare di capire a quanti pixel nel mio caso corrisponderebbe ciascuna colonna (carattere) ho usato la seguente operazione:
 Screen.Width / File.Out.Term.Width  =  8,13
laddove " Screen.Width " corrisponde al valore del 3° elemento dell'array "Geometry" del gruppo "[Main]" nel file gambas3.conf .
Il risultato di quell'operazione, come sopra già mostrato, è uguale a 8,13 .
Infatti, utilizzando poi in un semplice progetto la seguente istruzione:
 
Codice: [Seleziona]
Write String(CInt(Fix(Screen.Width / 8.13)), "A")
ottengo stampata in Console - da un'estremità orizzontale all'altra - un'unica riga, formata da tutti caratteri "A", senza che essa sia costretta ad andare a capo per "eccedenza" di caratteri da stampare.
Questo comportamento in Console è identico, pur cambiando carattere da far stampare.
Ho cercato nel file gambas3.conf semmai fosse riportato quel valore 8.13, ma non l'ho trovato: non c'è. Neppure so se esso venga considerato e usato dalla Proprietà File.Out.Term.Width (non sono per ora riuscito a trovarla nei sorgenti di Gambas per cercare di vedere quali valori riceve e da dove).
« Ultima modifica: 30 Agosto 2020, 14:55:23 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #9 il: 30 Agosto 2020, 17:57:41 »
Una cosa è certa, avevo intrapreso una strada sbagliata  :)
l'unico modo per avere certezza è quello di calcolare i caratteri il cui massimo non può superare ciò che ritorna File.Out.Term.Width

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.270
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #10 il: 31 Agosto 2020, 08:19:51 »
Una cosa particolare che ho notato è la seguente.
A me la dimensione orizzontale minima del pannello-progetto (panProject) è pari a 168 pixel (come da secondo valore dell'array panProject nel file gambas3.conf); così come il numero massimo di caratteri stampabili nella Console alla sua massima dimensione orizzontale 1366 pixel), senza che automaticamente prosegua nella riga successiva, è pari a 168.


« Ultima modifica: 31 Agosto 2020, 08:21:48 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re:Numero massimo di caratteri nella riga della console
« Risposta #11 il: 31 Agosto 2020, 09:50:51 »
Una cosa particolare che ho notato è la seguente.
A me la dimensione orizzontale minima del pannello-progetto (panProject) è pari a 168 pixel (come da secondo valore dell'array panProject nel file gambas3.conf); così come il numero massimo di caratteri stampabili nella Console alla sua massima dimensione orizzontale 1366 pixel), senza che automaticamente prosegua nella riga successiva, è pari a 168.

Su questo non posso esprimermi perché uso cambiare spesso le dimensioni sia del browser progetto che proprietà  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro