Funções com Strings - C# - Portugal-a-Programar
Funções com Strings
By zoep, February 9, 2011 in C#
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
não sei se percebi bem o problema, mas não custa nada tentar ajudar
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
Boas Josevellozo,
- 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.
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);
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
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
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";
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
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
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.
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.
Bem, isto nao me parece um problema dificil....
bool ler=false;
//Les uma linha do ficheiro.
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
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
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?
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";