Rss

  • youtube
  • linkedin
  • google

Renomeando arquivos usando lista de 0 a Z

Hoje eu estava programando alguns scripts e encontrei um pequeno problema de usar um padrão definido.

O padrão é criar arquivos onde a sequência inicia em 0 (zero) e não pode ser repetido até Z.

Exemplo:

myfile0.ext, myfile1.ext, myfile2.ext, (...), myfile9.ext, myfileA.ext, myfileB.txt, (...), myfileZ.txt

Bem, Isto não é um grande problema, então eu uso esse código.

// Filename
$seq = $last_used_seq = '';
$seqs = array_merge(range('0','9'), range('A', 'Z'));]
$l = 1;
while (!in_array($seq, $seqs)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Mas

$Seq

Não deu o valor esperado de 0 (zero) na primeira execução. Em vez disso, estava em branco.

As variáveis de depuração, Eu vi que o while Nunca é avaliada como true. A tentativa de reproduzir na linha de comando que vi

in_array($Seq, $PDCs);

sempre retornar true. Eu tentei usar “”, “R” e não importa qual o valor que eu usei, ainda retornando true.

Então eu mudar para usar STRICT argumento para in_array to true and works for ‘;A’; through ‘;Z’;, but not for ‘;0; through ‘;9;.

while (!in_array($seq, $seqs, true)) {
    $seq = chr(ord($last_used_seq) + $l++);
}

Damn…; PHP é certo, ;0; Não é estritamente iguais para 0. O Chr função de retorno string e

gama('0', '9')

Cria um array com integer valores.

Então, Eu mudei a abordagem para avaliar todos os valores com STRICT, Porque eu gostaria de criar um código limpo sem nenhuma outras funções para ser usado.

This is the final code that I’;usando o m:

// $seq de valores iniciais = ';
$PDCs = array_merge(gama(Ord('0'),Ord('9')), gama(Ord('A'), Ord('Z')));
$PDCs = array_map(«chr», $PDCs);
$l = 1;
ao mesmo tempo (!in_array($Seq, $PDCs, true)) {
    $Seq = chr(Ord($infos['last_seq']) + $l + +);
}

// Nomes de arquivo foreach ($itens_for_files as $key =>; $itens) {
    // ... Mais códigos para preencher o arquivo $seq = chr(Ord($Seq) + 1);
    ao mesmo tempo (!in_array($Seq, $PDCs, true)) {
    $Seq = chr(Ord($Seq) + 1);
    $FileName = 'myfile' . $Seq . 'ext';
    // ...
}

Como você pode ver, Eu mudei o $seqs initial values from ‘;0; para seu ASCII código e voltar ao seu valor que me deu um array com todos os valores em string type.

Até mais!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.