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: Julio C. Neves
Subject: Re: [shell-script] Processamento de lista de tarefas
Date: Wed, 21 Apr 2010 01:00:46 -0300

Marcio,
vê se é isso. Vou montar a lista dentro de uma variável, indentando:
Lista="1. Desenho
  1. Sistema de coordenadas
    1. Criar o método X()
    2. Criar o método Y()
  2. Primitivas gráficas
    1. Desenho de linhas
    2. Desenho de quadrados
2. Etc"

Mudando o IFS:
IFS='
'

O programa propriamente dito:
while read linha
do
    sp=$(grep -oE '^ +' <<< "$linha")
    case "${#sp}" in
        0) ind=$[++ind1].
           ind2=
           ind3=
           ;;
        2) ind=$ind1.$[++ind2].
           ind3=
           ;;
        4) ind=$ind1.$ind2.$[++ind3].
    esac
    echo $ind$(cut -f2- -d. <<<"$linha")
done <<< $Lista

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Aracaju turma de Shell em 12/05 - address@hidden;
- RJ turma de Shell em 14/06 - ligue (21)2210-6061;
- Turmas fechadas em outras cidades ligue (21)  8112-9988.


Em 20 de abril de 2010 22:14, Marcio Gil <address@hidden> escreveu:

>
>
> 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 <marciomgil%40bol.com.br>> 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]