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 > <[email protected]> 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? > > > > > > >
