Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

zoep

Funções com Strings

Mensagens Recomendadas

zoep

Muito boa tarde,

Tenho estado a desenvolver pequenos projectos para não me deixar 'dormir' por estas áreas, mas, mesmo após elaboração de tanto aplicação, ou pseudo-aplicações, existem sempre certas dúvidas que nunca me consigo responder a mim mesmo, e que não consigo, talvez por não o estar a fazer bem, encontrar resolução para o problema na internet.

A minha ideia é a seguinte, se alguem tiver alguma ideia de como o fazer, que me dê um feedback. Não quero um código já feito, mas de que maneira é que deverei fazer!

Eu tenho um ficheiro de texto, e a minha ideia é:

Ler o ficheiro de texto, linha a linha, e sempre que ele lê uma linha, e encontra a palavra 'António', irá copiar tudo o que está entre a palavra 'Antonio' e '/Antonio', e automaticamente envia-la para um array, para que mais tarde possa ler o array.

No ficheiro de texto, devemos de ter umas 5, 6 ou 7 situações em que gostava de passar as frases para o array.

Será que alguem está ai disposto a ajudar?

Um grande abraço, e continuação de uma boa semana

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
josevellozo

não sei se percebi bem o problema, mas não custa nada tentar ajudar  :P

se a questão está em saber como controlar quando é que se deve copiar o texto para o array (seria melhor outro ficheiro de texto, na minha opinião) basta para isso utilizar uma variável booleana que é posta a true quando detecta "antonio" e a false quando encontra-se "\antonio". deste modo, a frase só seria copiada para o array caso a variável estive-se true

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zoep

Boas Josevellozo,

a minha ideia é a seguinte:

- Tenho um ficheiro de texto gigante, quero ler o ficheiro de texto LINHA a LINHA e sempre que ele encontra na linha a palavra que eu quero, ele copia o que está entre a palavra que eu quero, e outra palavra, que tambem é escolhida por mim. O meu problema, está em saber, como é que eu faço para ele:

Lê uma linha, não encontra nada, avança para a proxima, lê outra, se encontrar copia, e manda-o para o array, ou para um ficheiro de texto tambem pode ser, e continua a ler o ficheiro, e sempre assim, até ao final do ficheiro. A frase que eu quero deve de aparecer umas 4 ou 5 vezes.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

Olá,

Onde é que estás a ter dificuldade?

- Abrir o ficheiro?

- Ler linha a linha?

- Pesquisar a palavra inicial?

- Pesquisar a palavra final?

- Obter o que está entre as duas palavras?

- Colocar o que está entre as duas palavras num array?

Convém que digas qual é o problema ou estás à espera que te façam o algoritmo?


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zoep

Olá,

Onde é que estás a ter dificuldade?

- Abrir o ficheiro?

- Ler linha a linha?

- Pesquisar a palavra inicial?

- Pesquisar a palavra final?

- Obter o que está entre as duas palavras?

- Colocar o que está entre as duas palavras num array?

Convém que digas qual é o problema ou estás à espera que te façam o algoritmo?

O problema está em pesquisar a palavra inicial e pesquisar a palavra final, e obter o que está entre essas duas palavras :P

Como disse no meu primeiro post, não estou à espera que alguem me faça o algoritmo, estou à espera que me ensinem como o fazer :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

Olá,

Basicamente precisas de fazer isto (não testei o código):

- Pesquisar na linha a palavra inicial (usas o método IndexOf)

- Pesquisar na linha a palavra final (tb usas o método IndexOf)

- obter o texto entre as duas palavras (usas o método SubString)

string palavra1 = "antonio";
string palavra2 = "/antonio";

// Esta variável vai conter a linha que o teu ficheiro.
string linha = "o antonio foi as compras e trouxe muita coisa. como não é cliente do pingo doce não tem desconto em talão /antonio";

string texto = "";
int pos1 = linha.IndexOf(palavra1);
if(pos1  >= 0)
{
   // Se entrou aqui é porque encontrou a primeira palavra
   // EDIT: Correcção de um erro na linha seguinte
   pos2 = linha.IndexOf(palavra2, pos1);
   if(pos2 >= 0)
   {
      // Se entrou aqui é porque encontrou a segunda palavra
      texto = linha.Substring(pos1, pos2 - pos1 + 1);
     // Agora é adicionares o conteúdo da variável texto no array
   }
}


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zoep

para a situação do que quero fazer um search ser uma string dessas, para o caso, este bocado de código funciona às 1000 maravilhas, obrigado.

Mas para o caso de ser no ficheiro, tenho de fazer uma leitura do ficheiro linha a linha, certo?

Antes de mais, Obrigado de novo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

Olá,

Ou lês o ficheiro linha a linha ou lês o ficheiro todo. Ao leres o ficheiro linha a linha pode acontecer que a primeira palavra esteja numa linha e a segunda noutra linha.

Se garantires que tal não acontece ou que essa situação não te interessa, a leitura linha a linha é melhor.

Exemplo:

StreamReader SR;
string S;
SR=File.OpenText(filename);
S=SR.ReadLine();
while(S!=null)
{
Console.WriteLine(S);
S=SR.ReadLine();
}
SR.Close();


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zoep

e ao ler o ficheiro todo, o programa vai conseguir apanhar todas as linhas que eu desejar?

è que eu quero apanhar mais do que uma frase, ou seja, são 5 ou 6 frases, e todas elas começam e acabam da mesma maneira.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
herty

Bem, isto nao me parece um problema dificil....

bool ler=false;

//Les uma linha do ficheiro.
linha = Ficheiro.readLine();

if(linha.Contains(("Antonio")) // Antonio encontrado,   vamos ler o que esta pa frente com o indexOf 
ler=true; //para saber que vais ler

//Aqui vais ler com o indexOf ate veres uma linha com o "/Antonio" 

//se nesta linha tem antonio
if(linha.Contains(("/Antonio"))  // /Antonio encontrado, vamos parar de ler...
ler=false; //para parar de ler
//se nao
linha = Ficheiro.readLine();  //repetes o processo em cima

Agora é so fazer um ciclo e controlares a leitura com a valiaver boleana "ler".

Não ta testado foi so de cabeça, mas espero ter ajudado :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rechousa

e ao ler o ficheiro todo, o programa vai conseguir apanhar todas as linhas que eu desejar?

è que eu quero apanhar mais do que uma frase, ou seja, são 5 ou 6 frases, e todas elas começam e acabam da mesma maneira.

Ao leres o ficheiro todo... Ficas com todas as linhas numa única variável.

Pode dar-se o caso da palavra inicial estar numa linha e a final noutra?


Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
necas

Boas,

uma outra maneira de implementares é utilzando expressões regulares:

string SubjectString = "o antonio foi as compras e trouxe muita coisa. como não é cliente do pingo doce não tem desconto em talão /antonio";
string ResultString = null;
try {
Regex RegexObj = new Regex("antonio(?<conteudo>.*)/antonio");
ResultString = RegexObj.Match(SubjectString).Groups["conteudo"].Value;
} catch (ArgumentException ex) {
Console.WriteLine(ex.Message);
}
Console.WriteLine(ResultString);
Console.ReadLine();

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.