Posso classificar arquivos A-Z e ao mesmo tempo Z-A?

0

Pergunta

Estou tentando classificar e renomear um grande número de arquivos rotulados como ########

O lado ESQUERDO do sublinhado são números (por exemplo, 32956715, 32956810, etc.) que não se repetem.
O lado DIREITO do sublinhado também são números (por exemplo, 1, 2, 3, etc.) e eles se repetem.

Example posted at pastebin

( O lado esquerdo é o número de uma varredura e o lado direito é a página daquela varredura em particular. )

Eu gostaria de poder classificar o lado esquerdo do sublinhado Z-A e o lado direito A-Z.

Exemplo:

3_1
3_2
3_3
2_1
2_2
2_3
1_1
1_2
1_3

Estou aberto a sugestões que alcancem o resultado que estou procurando.

Atualmente estou usando o irfanview para enviar os nomes de arquivos para um arquivo de texto, copiando e colando o texto no excel, separando os nomes dos arquivos em colunas e classificando a coluna com o lado ESQUERDO do sublinhado por ZA e a coluna com o nome Lado direito do sublinhado por AZ. Então eu essencialmente inverter o processo e ter o visualizador de miniaturas irfanview carregar os arquivos usando um arquivo txt criado a partir da minha lista de excel corretamente ordenada.

Tem que haver uma maneira melhor, certo?

Obrigado!

UPDATE

More Information to attempt to clarify the question. I'm embarrased to admit this, but the end result is to print out each of these files and have them be face-up, in reverse chronological order (the newest document on top(face-up) and the oldest document on the bottom (face-up)). (Printing isn't very tech savvy is it? Can I still be in the superuser's club--please.)

A client gives us a disc of imaged documents (tiffs or gifs with jpgs mixed in). The discs can have anywhere from 50 to 20000 images on them. I have to print them out. Smaller numbers=older images and larger numbers=newer images. I am using Irfanview thumbnail viewer to batch print to a big copy machine. Right now I can only sort the images A-Z before printing while still keeping them in some recognizable order. Then I have to go through the printed stack and do the reverse chronological sorting myself. This is very time consuming and with attachments to documents it is difficult to determine where one document stops and the next begins.

Comentários

I am not sure if I understood the question. If the left set of digits never repeat then the problem does not exist. You can not have a situation like 30000_1, 30000_2 because the left side does not repeat. – Sahil

Você está correto. Eles se repetem se houver mais de uma página no documento digitalizado. Eu estava apenas tentando diferenciar esse tipo de repetição da repetição do lado direito, que sempre começa com 1 e conta com base no número de páginas no documento.

Quero agradecer a todos que já fizeram perguntas. Isso significa que você pelo menos leu a pergunta e tentaria ajudar se eu não tivesse feito grandes esforços para confundir você. Espero que minhas informações extras respondam às outras perguntas que não abordei especificamente.

Respostas

A resposta do script Lua parece promissora, mas estou recebendo um erro ao tentar usá-lo. Pensamentos?

lua -e "io.stdout:setvbuf 'no'" "Reverse_Sort.lua" 
lua: Reverse_Sort.lua:16: attempt to compare number with nil
stack traceback:
 Reverse_Sort.lua:16: in function <Reverse_Sort.lua:6>
 [C]: in function 'sort'
 Reverse_Sort.lua:32: in main chunk
 [C]: ?
Exit code: 1
    
por The_Buff 06.01.2011 / 22:38

1 resposta

1

Desde que você disse que este é um problema recorrente, um script é apropriado.

Aqui está um script Lua para você seguir em frente.

Editar: atualizei o script com base em suas informações adicionais. Ele pegará um arquivo contendo nomes de arquivos, os classificará e criará um novo arquivo na ordem classificada.

Script (editado)

-- Get input and output filenames from the command line or pick defaults
input_filename = arg[1] or 'unsorted.txt'
output_filename = arg[2] or 'sorted.txt'

-- Define custom sort function
function custom_sort(filename1, filename2)

    a, b = string.match(filename1, '(%d+)_(%d+)')
    c, d = string.match(filename2, '(%d+)_(%d+)')

    a = tonumber(a)
    b = tonumber(b)
    c = tonumber(c)
    d = tonumber(d)

    if a > c then
        return true
    elseif a < c then
        return false
    else
        return b < d
    end
end

-- Read filenames from file into table
local filenames = {}
for line in io.lines(input_filename) do
    filenames[# filenames + 1] = line
end

-- Sort table using our custom sort function
table.sort(filenames, custom_sort)

-- Write sorted filenames to file
io.output(output_filename)
for _,filename in ipairs(filenames) do
    io.write(filename, '\n')
end

-- Done

Lua tem a função os.rename () para realmente fazer a renomeação do arquivo ou você provavelmente poderia copiar a saída de texto do script para um utilitário de renomeação.

    
por 07.01.2011 / 00:00