Jump to content
zoep

Funções com Strings

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
josevellozo

nesse caso aquilo que eu disse deve funcionar. para comparar strings em C# se bem me lembro (ja não programo em c# ha uns anitos) não existe a função strcmp e acho que se fazia desta forma

int result = String.Compare(string1, string2);

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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();

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.