shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Processamento de lista de tarefas


From: Helton Moraes
Subject: Re: [shell-script] Processamento de lista de tarefas
Date: Tue, 20 Apr 2010 01:07:55 -0300

Cara, essa é cruel... Mas já me deparei com coisas do tipo, então não vamo
se entregar pros home!

Me parece que para isso seria necessário um script envolvendo laços FOR e
IF, expressões regulares e provavelmente o sed.

Vejamos: se pegarmos uma linha aleatória, o que realmente determina o nível
(se é um, dois ou três), ao menos no exemplo que tu mandou, é a presença das
palavras "projeto", "tarefa" e "sub-tarefa". Teria que ver como funciona uma
lista com mais níveis, uns quatro ou cinco (quero crer que o todolist não
usaria sub-sub-sub-tarefa ;oP).
Mas só isso não basta, pois se tivermos várias sub-tarefas em sequência, no
mesmo nível, temos de saber se é a subtarefa 1, 2, 3, etc (que ficaria
x.x.1, x.x.2, x.x.3, etc).

Eu tentaria criar aquele primeiro campo, dos números, usando uma string
preenchida com contadores. Tu cria os contadores que vão contando as
ocorrências em cada linha das palavras "projeto", "tarefa" e "subtarefa",
etc.
Se ao trocar de linha passar para um nível abaixo (de uma linha com a
palavra "projeto" para uma linha com a palavra "tarefa", por exemplo), troca
de contador, ou seja, pára de somar o contador do nível 1 e começa a
aumentar o contador do nível 2.
Além disso, se ao trocar de linha passar para um nível ACIMA, (de subtarefa
para tarefa, por exemplo), passa a usar o contador 2 e dá um RESET no
contador 3.

Nâo vou ter tempo agora/hoje para continuar meditando, mas um pseudocódigo a
se pensar (com laços) seria:

prim=0; seg=0; terc=0;
counter=prim
for <cada linha>
    if <linha contém> 'projeto'
        counter++
        seg=terc=0
    elseif <linha contém> 'tarefa'
        counter=seg
        counter++
        terc=0
    elseif <linha contém> 'subtarefa'
        counter=terc
        counter++
   endif
endfor

Claro que esse pseudocódigo só está contando coisas, além disso teria que
ser colocado mais algum comando para prefixar uma string gerada por algo do
tipo 'while i<=level, append ".$counter" ' ao campo.

Acho que a estimativa de "pelo menos vinte linhas" que o outro amigo colocou
já está ficando bastante otimista... Mas como exercício vale! (resta saber
se essa mão toda vale a pena para usar o arquivo, mas isso é com cada um).

Boa sorte

Helton Moraes


Em 19 de abril de 2010 22:09, Marcio Gil <address@hidden> escreveu:

>
>
> Pessoal, tenho o seguinte problema para resolver:
>
> Estou tentando processar uma lista de tarefas gerada por uma
> ferramenta (Todolist), e o formato é o seguinte:
>
> 1. Projeto (risk: 6) (allocated to: Sicrano+Beltrano) (allocated
> by: Fulano)
> 1. Primeira tarefa (risk: 6) (allocated to: Sicrano+Beltrano)
> (allocated by: Fulano)
> 1. Primeira sub-tarefa (risk: 6) (allocated to: Sicrano)
> 2. Segunda sub-tarefa (risk: 6) (allocated to: Beltrano)
> 2. Segunda tarefa (risk: 6) (allocated to: Sicrano+Beltrano)
> (allocated by: Fulano)
> 1. Terceira sub-tarefa (risk: 6) (allocated to: Sicrano)
> 2. Quarta sub-tarefa (risk: 6) (allocated to: Beltrano)
>
> Repare que é uma árvore de tarefas. Preciso transformar isto numa
> tabela simples como essa:
>
> 1. Projeto 6 Sicrano+Beltrano Fulano
> 1.1. Primeira tarefa 6 Sicrano+Beltrano Fulano
> 1.1.1. Primeira sub-tarefa 6 Sicrano
> 1.1.2. Segunda sub-tarefa 6 Beltrano
> 1.2. Segunda tarefa 6 Sicrano+Beltrano Fulano
> 1.2.1. Terceira sub-tarefa 6 Sicrano
> 1.2.2. Quarta sub-tarefa 6 Beltrano
>
> Ou seja, extrair os campos da lista de tarefas e transformá-las em
> uma tabela com linhas e colunas separadas com tab.
>
> A parte de extrair com campos e sapara-los com TAB eu sei fazer, a
> dúvida é o primeiro campo, que o Todolist não gera com o número das
> tarefas e sub-tarefas concatenado, porém indica o nível da tarefa
> por meio de endentação.
>
> Alguém pode me dar uma luz de como fazer isso?
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]