Jump to content
Sign in to follow this  
amilcarh

Verificar se já existe um determinado valor dentro de um array

Recommended Posts

amilcarh

Boa tarde, eu estou aqui com um pequeno problema, e já a algum tempo que não trabalho com C#, e se fosse possível obter umas dicas agradecia.

Então o meu problema é o seguinte:

Tenho um ficheiro que contem uma listagem de países, e eu pretendo introduzir mais países na lista. Até aqui tudo bem, estou a inserir e a mostrar por ordem alfabética, mas o problema é que estou a tentar correr o array para verificar se o país introduzido já existe na listagem e o código está a ignorar, a lógica parece estar correcta, não sei onde estou a falar.

Podem ver aqui o código para perceber um pouco a minha dúvida.

StreamReader srficheirocom = new StreamReader(@"Paises.txt", Encoding.Default);
                    String Linhacom = srficheirocom.ReadToEnd();                 
                        int i = 0;
                        while (i < Linhacom.Length)
                        {                          
                            if (Linhacom != Ins_Pais)
                            {
                                i++;
                            }
                            else
                            {
                                MessageBox.Show("Esse País já existe!");
                                break;
                            }                            
                        }
                                srficheirocom.Close();
                                StreamWriter swficheiro = new StreamWriter("Paises.txt", true);
                                swficheiro.Write(Ins_Pais + ";");
                                swficheiro.Close();                            
                        }

Já agora penso que o problema esteja no ciclo if, porque acho que deveria ser

if (Linhacom[i] != Ins_Pais)

mas assim dá-me erro.

Se poderem ajudar eu agradecia.

Cumprimentos a todos.

Share this post


Link to post
Share on other sites
divhenr

Boas,

Não querendo dizer mal do código mas isso está complexo e lento demais.

Poderias utilizar uma lista.

List<string> list = new List<string>();

using (StreamReader reader = new StreamReader("file.txt"))

{

    string line;

    while ((line = reader.ReadLine()) != null)

    {

list.Add(line); // Add to list.

Console.WriteLine(line); // Write to console.

    }

}

Depois disto, com o objecto list, podes fazer "Find()" ou "contains()", mais rapido e menos trabaho.

Espero ter ajudado.

Share this post


Link to post
Share on other sites
vesteves

Boas,

No sentido de acrescentar mais uma opção que pode ser usada, privilegiando a simplicidade relativamente a velocidade.

// Para criar uma lista com todas as linhas do ficheiro (supondo que existe um país por linha).
var countries = File.ReadAllLines(@"Paises.txt").ToList();

// Verificar se o País já se encontra na lista, adicionando apenas no caso de não existir. Atenção que esta versão é CASE SENSITIVE.
if (!countries.Contains(providedCountry))
{
countries.Add(providedCountry);
} else {
MessageBox.Show("País já existe.");
}

// Verificar se o País já se encontra na lista, adicionando apenas no caso de não existir. Atenção que esta versão é CASE INSENSITIVE.
if (countries.FirstOrDefault(country => country.Equals(providedCountry, StringComparison.InvariantCultureIgnoreCase)) == null)
{
countries.Add(providedCountry);
} else {
MessageBox.Show("País já existe.");
}

// Escrever todas as linhas para o ficheiro.
File.WriteAllLines(@"C:\countries.txt", countries.ToArray());

Cumprimentos,

Virgílio Esteves

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
Sign in to follow this  

×
×
  • 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.