print formated special characteres

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

print formated special characteres

Celso Lorenzetti

Hi all,

 

Somebody help me, please.

How to make the texts are aligned with 10 characters?

 

elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

 

Output:

INFO: 

Variável  Fim

Variavel   Fim

 

 

thank you

 

 

Att,

Assinatura Outlook

 




Avast logo

Este email foi escaneado pelo Avast antivírus.
www.avast.com


Reply | Threaded
Open this post in threaded view
|

Re: print formated special characteres

Matthias Apitz
El día sábado, octubre 17, 2020 a las 03:37:46p. m. -0300, Celso Lorenzetti escribió:

> Somebody help me, please.
>
> How to make the texts are aligned with 10 characters?
>
>
>
> elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

Hola Celso,

You can reproduce the same on the UNIX shell with:

$ printf "\n%-10s Fim\n%-10s Fim\n" "Variável" "Variavel"

Variável  Fim
Variavel   Fim


$ printf "\n%-10s Fim\n%-10s Fim\n" "VariXvel" "Variavel"

VariXvel   Fim
Variavel   Fim

The second test (changing the accented char 'á' by 'X'), shows that the
problem/bug is a) more generic, not only in PostgreSQL and b) has todo
with being the UTF-8 char 'á' a two byte char, while 'X' is only one
byte.

I have no solution, though at the moment...

Obrigado

        matthias

--
Matthias Apitz, ✉ [hidden email], http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Без книги нет знания, без знания нет коммунизма (Влaдимир Ильич Ленин)
Without books no knowledge - without knowledge no communism (Vladimir Ilyich Lenin)
Sin libros no hay saber - sin saber no hay comunismo. (Vladimir Ilich Lenin)


Reply | Threaded
Open this post in threaded view
|

Re: print formated special characteres

Peter J. Holzer
On 2020-10-17 20:51:36 +0200, Matthias Apitz wrote:
> El día sábado, octubre 17, 2020 a las 03:37:46p. m. -0300, Celso Lorenzetti escribió:
>
> > Somebody help me, please.
> >
> > How to make the texts are aligned with 10 characters?
> >
> >
> >
> > elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

Which programming language is this? PL/pgSQL?

> Hola Celso,
>
> You can reproduce the same on the UNIX shell with:
>
> $ printf "\n%-10s Fim\n%-10s Fim\n" "Variável" "Variavel"
>
> Variável  Fim
> Variavel   Fim

Hmm. Zsh gets it right:

trintignant:~ 0:31 :-) 1032% printf "\n%-10s Fim\n%-10s Fim\n" "Variável" "Variavel"

Variável   Fim
Variavel   Fim

As do Perl and Python.


> The second test (changing the accented char 'á' by 'X'), shows that the
> problem/bug is a) more generic, not only in PostgreSQL and b) has todo
> with being the UTF-8 char 'á' a two byte char, while 'X' is only one
> byte.

Yes, determining how much space a UTF-8 sequence occupies on screen is
surprisingly hard. I'm not sure what the C standard says about that. But
these days I would expect any programming language to get it right at
least for the simple cases.

        hp

--
   _  | Peter J. Holzer    | Story must make more sense than reality.
|_|_) |                    |
| |   | [hidden email]         |    -- Charles Stross, "Creative writing
__/   | http://www.hjp.at/ |       challenge!"

signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: print formated special characteres

Tom Lane-2
"Peter J. Holzer" <[hidden email]> writes:
> On 2020-10-17 20:51:36 +0200, Matthias Apitz wrote:
>> El día sábado, octubre 17, 2020 a las 03:37:46p. m. -0300, Celso Lorenzetti escribió:
>>> elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

> Which programming language is this? PL/pgSQL?

Looks like C in the backend.

>> The second test (changing the accented char 'á' by 'X'), shows that the
>> problem/bug is a) more generic, not only in PostgreSQL and b) has todo
>> with being the UTF-8 char 'á' a two byte char, while 'X' is only one
>> byte.

> Yes, determining how much space a UTF-8 sequence occupies on screen is
> surprisingly hard. I'm not sure what the C standard says about that. But
> these days I would expect any programming language to get it right at
> least for the simple cases.

Our version of snprintf intentionally counts bytes not characters,
so that it does not have to make assumptions about what encoding
the given string uses.  It's somewhat unclear whether the C/POSIX
standard mandates either of these interpretations.  The GNU
implementation of snprintf tries to count characters.  But in the
cases where that's mattered to us at all, it's generally been the
wrong thing, because glibc didn't necessarily know the encoding to
use.  That's one reason why we stopped relying on libc's snprintf.

The way to get this to work as Celso wishes would be to count
characters and then do his own arithmetic about how much padding
to add.

                        regards, tom lane


Reply | Threaded
Open this post in threaded view
|

RES: print formated special characteres

Celso Lorenzetti
In reply to this post by Peter J. Holzer
Hi Peter,

is language C standart..

On 2020-10-17 20:51:36 +0200, Matthias Apitz wrote:
> El día sábado, octubre 17, 2020 a las 03:37:46p. m. -0300, Celso
Lorenzetti escribió:
>
> > Somebody help me, please.
> >
> > How to make the texts are aligned with 10 characters?
> >
> >
> >
> > elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

Which programming language is this? PL/pgSQL?


> Hola Celso,
>
> You can reproduce the same on the UNIX shell with:
>
> $ printf "\n%-10s Fim\n%-10s Fim\n" "Variável" "Variavel"
>
> Variável  Fim
> Variavel   Fim

Hmm. Zsh gets it right:

trintignant:~ 0:31 :-) 1032% printf "\n%-10s Fim\n%-10s Fim\n" "Variável"
"Variavel"

Variável   Fim
Variavel   Fim

As do Perl and Python.


> The second test (changing the accented char 'á' by 'X'), shows that
> the problem/bug is a) more generic, not only in PostgreSQL and b) has
> todo with being the UTF-8 char 'á' a two byte char, while 'X' is only
> one byte.

Yes, determining how much space a UTF-8 sequence occupies on screen is
surprisingly hard. I'm not sure what the C standard says about that. But
these days I would expect any programming language to get it right at least
for the simple cases.

        hp

--
   _  | Peter J. Holzer    | Story must make more sense than reality.
|_|_) |                    |
| |   | [hidden email]         |    -- Charles Stross, "Creative writing
__/   | http://www.hjp.at/ |       challenge!"


--
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus



Reply | Threaded
Open this post in threaded view
|

RES: print formated special characteres

Celso Lorenzetti
In reply to this post by Tom Lane-2
Thanks Tom Lane, got it, I will follow the suggestion

Att,



-----Mensagem original-----
De: Tom Lane [mailto:[hidden email]]
Enviada em: sábado, 17 de outubro de 2020 20:08
Para: Peter J. Holzer
Cc: [hidden email]
Assunto: Re: print formated special characteres

"Peter J. Holzer" <[hidden email]> writes:
> On 2020-10-17 20:51:36 +0200, Matthias Apitz wrote:
>> El día sábado, octubre 17, 2020 a las 03:37:46p. m. -0300, Celso Lorenzetti escribió:
>>> elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

> Which programming language is this? PL/pgSQL?

Looks like C in the backend.

>> The second test (changing the accented char 'á' by 'X'), shows that the
>> problem/bug is a) more generic, not only in PostgreSQL and b) has todo
>> with being the UTF-8 char 'á' a two byte char, while 'X' is only one
>> byte.

> Yes, determining how much space a UTF-8 sequence occupies on screen is
> surprisingly hard. I'm not sure what the C standard says about that. But
> these days I would expect any programming language to get it right at
> least for the simple cases.

Our version of snprintf intentionally counts bytes not characters,
so that it does not have to make assumptions about what encoding
the given string uses.  It's somewhat unclear whether the C/POSIX
standard mandates either of these interpretations.  The GNU
implementation of snprintf tries to count characters.  But in the
cases where that's mattered to us at all, it's generally been the
wrong thing, because glibc didn't necessarily know the encoding to
use.  That's one reason why we stopped relying on libc's snprintf.

The way to get this to work as Celso wishes would be to count
characters and then do his own arithmetic about how much padding
to add.

                        regards, tom lane



--
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus



Reply | Threaded
Open this post in threaded view
|

Re: print formated special characteres

Pavel Stehule
In reply to this post by Celso Lorenzetti


po 19. 10. 2020 v 3:18 odesílatel Celso Lorenzetti <[hidden email]> napsal:
Hi Peter,

is language C standart..

On 2020-10-17 20:51:36 +0200, Matthias Apitz wrote:
> El día sábado, octubre 17, 2020 a las 03:37:46p. m. -0300, Celso
Lorenzetti escribió:
>
> > Somebody help me, please.
> >
> > How to make the texts are aligned with 10 characters?
> >
> >
> >
> > elog(INFO, "\n%-10s Fim\n%-10s Fim\n", "Variável", "Variavel");

Which programming language is this? PL/pgSQL?

This is an internal function available in internal C API.

As Tom Lane said in other mail - this internal API just doesn't support alignment for multibyte encodings.

Regards

Pavel



> Hola Celso,
>
> You can reproduce the same on the UNIX shell with:
>
> $ printf "\n%-10s Fim\n%-10s Fim\n" "Variável" "Variavel"
>
> Variável  Fim
> Variavel   Fim

Hmm. Zsh gets it right:

trintignant:~ 0:31 :-) 1032% printf "\n%-10s Fim\n%-10s Fim\n" "Variável"
"Variavel"

Variável   Fim
Variavel   Fim

As do Perl and Python.


> The second test (changing the accented char 'á' by 'X'), shows that
> the problem/bug is a) more generic, not only in PostgreSQL and b) has
> todo with being the UTF-8 char 'á' a two byte char, while 'X' is only
> one byte.

Yes, determining how much space a UTF-8 sequence occupies on screen is
surprisingly hard. I'm not sure what the C standard says about that. But
these days I would expect any programming language to get it right at least
for the simple cases.

        hp

--
   _  | Peter J. Holzer    | Story must make more sense than reality.
|_|_) |                    |
| |   | [hidden email]         |    -- Charles Stross, "Creative writing
__/   | http://www.hjp.at/ |       challenge!"


--
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus