[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [shell-script] Processamento de lista de tarefas
From: |
Marcio Gil |
Subject: |
RE: [shell-script] Processamento de lista de tarefas |
Date: |
Tue, 20 Apr 2010 22:14:11 -0300 |
Na verdade o que determina o nível é a endentação, ou seja, os
espaços no início da linha. Os termos "Projeto", "Tarefa" e
"sub-tarefa" são só para exemplificar, poderiam ser qualquer outra
coisa.
Desculpe se não consegui ser mais claro. Vou dar outro exemplo com
os espaços indicados por <SP> (acredito que o meu e-mail tenha
chegado sem eles :-)
1. Desenho
<SP><SP>1. Sistema de coordenadas
<SP><SP><SP><SP>1. Criar o método X()
<SP><SP><SP><SP>2. Criar o método Y()
<SP><SP>2. Primitivas gráficas
<SP><SP><SP><SP>1. Desenho de linhas
<SP><SP><SP><SP>2. Desenho de quadrados
2. Etc.
Deveria ficar:
1. Desenho
1.1. Sistema de coordenadas
1.1.1. Criar o método X()
1.1.2. Criar o método Y()
1.2. Primitivas gráficas
1.2.1. Desenho de linhas
1.2.2. Desenho de quadrados
2. Etc.
No caso talvez eu pudesse utilizar as expressões regulares:
'^[0-9]' para o nível 0
'^ [0-9]' para o nível 1
'^ [0-9]' para o nível 2
'^ [0-9]' para o nível 3
'^ [0-9]' para o nível 4
e assim por diante. Provavelmente eu tenha mesmo que criar um laço
"for" com vários "if"s, porém vou ver se consigo alguma coisa menor
com o awk.
Abraços,
Marcio Gil.
> -----Original Message-----
> From: Helton Moraes
>
> 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?
> >
> >
> >
>