Clipper On Line • Ver Tópico - PHP: str_pad

PHP: str_pad

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

PHP: str_pad

Mensagempor cjp » 10 Mai 2016 23:51

Pessoal,

Alguém poderia me dizer como faço para usar correntamente a função str_pad do PHP? Estou querendo alinhar uma lista, desta maneira:

$mensagem = $mensagem.str_pad(substr($rw["produto"],0,30),60)."        ".$rw["prsacolao"]."                           ".$rw["prmaximo"].PHP_EOL;


Não sei se estou fazendo algo errado, mas não está saindo alinhado. Segui o modelo do manual do PHP, mas devo estar fazendo alguma coisa errada.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

PHP: str_pad

Mensagempor ANDRIL » 11 Mai 2016 07:12

$mensagem = $mensagem.str_pad(substr($rw["produto"],0,30),60," ",STR_PAD_RIGHT)."    ".$rw["prsacolao"]."             ".$rw["prmaximo"].PHP_EOL;


Mesmo dizendo que por padrão o caracter de preenchimento seja espaço, coloque-o no 3o parâmetro alem do 4o parâmetro responsável pelo alinhamento. Aqui uso assim e funciona perfeitamente. Uso PHP 5.4.45
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

PHP: str_pad

Mensagempor cjp » 11 Mai 2016 17:45

Caro Andril,

Em primeiro lugar, muito obrigado pela resposta e pelo seu interesse em ajudar.

Da forma como vc me sugeriu melhorou bastante, mas acho que ainda não está 100% certo. Ainda está ficando desalinhado.

Fiz vários testes, mas este é mais evidente:

    $mensagem = $mensagem.str_pad(substr($rw["produto"],0,12),35,"-----",STR_PAD_RIGHT)."    ".$rw["prsacolao"]."                            ".$rw["prmaximo"].PHP_EOL;
   echo "<br>";
   echo substr($rw["produto"],0,12)."!!!";
   echo "<br>";
   echo str_pad(substr($rw["produto"],0,12),35,"-----",STR_PAD_RIGHT)."!!!";


Note que troquei o espaço por ---- para facilitar a visualização. Idem quanto ao !!! final.

Veja como aparece na tela:

pão de leite!!!
pão de leite-----------------------!!!
abacaxi (1 u!!!
abacaxi (1 u-----------------------!!!
ameixa fresc!!!
ameixa fresc-----------------------!!!
côco seco (1!!!
côco seco (1-----------------------!!!
limão (12 un!!!
limão (12 un-----------------------!!!
mamão formos!!!
mamão formos-----------------------!!!
manga Tomy (!!!
manga Tomy (-----------------------!!!
maracujá aze!!!
maracujá aze-----------------------!!!
melancia (1 !!!
melancia (1 -----------------------!!!
melão (1 uni!!!
melão (1 uni-----------------------!!!
abobrinha (2!!!
abobrinha (2-----------------------!!!
alho (+- 1 K!!!
alho (+- 1 K-----------------------!!!
batata doce !!!
batata doce -----------------------!!!
beterraba (1!!!
beterraba (1-----------------------!!!
cebola (2,5 !!!
cebola (2,5 -----------------------!!!
cenoura (4 u!!!
cenoura (4 u-----------------------!!!
chuchu (1 un!!!
chuchu (1 un-----------------------!!!
ovo vermelho!!!
ovo vermelho-----------------------!!!


Aparentemente, o número de caracteres está correto, mas em algumas linhas os caracteres ocupam mais espaço que os outros, o que causa o desalinho.

Parece então que o problema não é na str_pad(), nem na substr(), estou correto? Mas como resolver isso?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

PHP: str_pad

Mensagempor ANDRIL » 11 Mai 2016 23:00

Se o problema não é com a função str_pad() pode ser o tipo de fonte durante a exibição. Já tentou usar a Courier, esta tem tamanho igual para qualquer caracter e não deve dar diferença.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

PHP: str_pad

Mensagempor cjp » 08 Jun 2016 19:59

Realmente com a fonte Courier, na tela, fica correto.

O problema eh que estou querendo enviar esta lista por e-mail. Dai estou fazendo uma variavel com os dados para enviar usando a funcao mail(). Mas no e-mail nao estah alinhado, nao esta usando a fonte Courier.

Por favor, veja se estou fazendo algo errado:

  echo "<FONT FACE='Courier New'>";
 
  $mensagem = $mensagem.PHP_EOL."Produtos com preço maior:".PHP_EOL."Produto                                            Preço                        Preço máximo".PHP_EOL;

  while ($rw=mysql_fetch_array($rs))
  {
    $mensagem = $mensagem.str_pad(substr($rw["produto"],0,12),35,"  ",STR_PAD_RIGHT)."    ".$rw["prsacolao"]."                            ".$rw["prmaximo"].PHP_EOL;
   
  }



mail ("ibcneto@inaciocarvalho.com.br",                       //email aonde o php vai enviar os dados do form
      "Lista dos produtos a enviar",
      "\n".$mensagem,
      "From: hort@inaciocarvalho.com.br"
     );
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes




Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 12 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro