Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

danicarla

fazer função de contar caracteres

Recommended Posts

Oi gente, tudo bem?

Estou quebrando a cabeça aqui pra tentar fazer isso.

 

Tenho uma tag <pre> que que tem 20 caracteres por linha, e uma string que tem no máximo 70 caracteres.

Eu queria que essa string ficasse centralizado dentro dessa tag <pre> assim:

 

<pre>
|  Dani Carla de   |
|      Almeida     |
</pre>
O problema é como eu faço pra centralizar ela colocando os espaços que faltam no inicio e no fim do nome... e pulando pra linha de baixo quando exceder o tamanho da linha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa.. acho que não expliquei direito :(

Posso usar o   ou o espaço, mas o problema é saber quantos espaços serão, Não posso usar a tag center e nem css porque o meu código vai gerar um .txt que alimenta um painel eletrônico.. por isso preciso dos espaços corretamente.

Vou precisar fazer uma função usando strlen para calcular quantos espaços em branco preciso.
Estou tentando fazer algo + ou - assim:

// Recupera o numero de caracteres da string
$num_caracteres = strlen($x['nome_cliente']);

// Numero máximo de caracteres que a string vai vir do banco
$num_limite = 70;

// Numero de caracteres que faltam pra dar 70 
$num_sobra = $num_limite - $num_caracteres;

// Obtenho numero de caracteres que tenho faltando pra dar 70
$num_espacos_faltando = $num_sobra / 2;

// Calculo o numero de espaços disponíveis para colocar na frente da string:
$num_espacos_frente = floor($num_espacos_faltando);

// Calculo o numero de espaços disponíveis para colocar no final da string:
$num_espacos_final = ceil($num_espacos_faltando);

Desse jeito eu vou saber quantos espaços vou precisar colocar antes e depois da string, mas dependendo do tamanho do nome eu não consigo centralizar igual no exemplo que fiz acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize str_pad em conjunto com strlen. Pelo o que eu vi o seu limite são 18 caracteres mais os pipes "|".

 

Primeiro, você precisa "quebrar a string" antes dos 20 em um espaço em branco. Você realiza isso com strrpos em conjunto de strlen. Depois é só juntar as linhas:

 

$string = 'Gabriel Bertolini Heming';
$stringLength = strlen($string);
$lineLength = 18;

// lista aonde conterá todas as linhas
$lineList = [];
while($stringLength > 0) {

    // se a linha for menor que o limite, não há o porque de "quebrar"
    if($stringLength <= $lineLength) {
        $stringLength = 0;
        $row = $string;
    } else {

        // verifica o último espaço em branco dentro dos 18 caracteres iniciais
        $limit = strrpos($string , ' ' , - ($stringLength - $lineLength));

        // retorna a string conforme o espaço em branco
        $row =  trim(substr($string , 0 , $limit));

        // cria a nova string, sem a parte adicionada a linha atual
        $string = trim(substr($string , $limit));

        //pega o tamanho da nova string
        $stringLength = strlen($string);
    }

    // cria a linha preenchendo com espaços em branco.
    $lineList[] = sprintf('|%s|', str_pad($row , $lineLength , ' ' , STR_PAD_BOTH));
}

echo implode("\n" , $lineList);
Saída:

 

|Gabriel Bertolini |
|      Heming      |
Uma questão importante de se considerar, é o tamanho da palavra. Palavras impares não poderão ser centralizadas (variação de um caracter) em um espaço de tamanho par. Ou seja, é o que acontece com o a primeira linha "Gabriel Bertolini" que possui 17 caracteres.

 

Outro ponto é a saída em navegadores, somente fontes monoespaçadas terão o output correto (o arquivo txt é monoespaçada). No navegador, utilize uma fonte como courier new para terstar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.