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

Ascensao

Text File to Array 2D

Mensagens Recomendadas

Ascensao    2
Ascensao

Boas pessoal

Tenho um ficheiro text.txt com os seguintes valores:

google

htttp://google.pt

facebook

htttp://facebook.com

gmail

http://gmail.com

hotmail

http://hotmail.com

agora preciso de um array 2D ( string[,] x = new string[,] )

e preciso de copiar os nomes para a posição [x,] e os links dos sites para a posiçao [,y]

a estrutura do array deve ficar assim:

google facebook gmail hotmail

http://go.... htttp://facebo... http://gm... http://hot....

o problema e que não sei quantos sites tenho guardado no text.txt

logo só posso criar o array depois de contar as linhas do text.txt que se não estou em erro conta se assim:

int lineCount = File.ReadLines(text.txt).Count();

mas depois não sei como ler os ficheiro e passar para o array multidimensional de modo a que o array contenha os dados como demonstrei acima na estrutura do array.


Agradeço conselhos e opiniões:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nelsonr    333
nelsonr

Poderá haver formas mais simples, mas aqui vai um exemplo:

string[] conteudoFicheiro = File.ReadAllLines(@"D:\Teste\links.txt");
string[,] links = new string[conteudoFicheiro.Length / 2, 2];
//
for (int linha = 0, numeroLink = 0; linha < conteudoFicheiro.Length; linha++)
{
if(linha % 2==0)
	links[numeroLink, 0] = conteudoFicheiro[linha];
else
	links[numeroLink++, 1] = conteudoFicheiro[linha];
}

Claro que convem adicionares algumas verificações, como por exemplo o número de linhas tem de ser par.

No entanto isso era capaz de ficar melhor numa lista ou dicionário.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jota_wa    3
jota_wa

Poderá haver formas mais simples, mas aqui vai um exemplo:

string[] conteudoFicheiro = File.ReadAllLines(@"D:\Teste\links.txt");
string[,] links = new string[conteudoFicheiro.Length / 2, 2];
//
for (int linha = 0, numeroLink = 0; linha < conteudoFicheiro.Length; linha++)
{
if(linha % 2==0)
	links[numeroLink, 0] = conteudoFicheiro[linha];
else
	links[numeroLink++, 1] = conteudoFicheiro[linha];
}

Claro que convem adicionares algumas verificações, como por exemplo o número de linhas tem de ser par.

No entanto isso era capaz de ficar melhor numa lista ou dicionário.

Boas

Exactamente.Se usares um Dictionary facilita muito depois a pesquisa (caso necessites de a fazer),e mesmo a gestão do próprio objecto.

Este é uma das soluções:

Dictionary<string, Uri> urls = new Dictionary<string,Uri>();
using (StreamReader sr = new StreamReader(@"C:\meuFicheiro.txt"))
{
while (!sr.EndOfStream)
{
	string linha = sr.ReadLine();
	string dominio = string.Empty;
	if (!Uri.IsWellFormedUriString(linha, UriKind.RelativeOrAbsolute))
	{
		dominio = linha;
		linha = sr.ReadLine();
		if (Uri.IsWellFormedUriString(linha, UriKind.RelativeOrAbsolute))
			urls.Add(dominio, new Uri(linha.Trim()));
	}
}
}

Depois para pesquisares basta ires pela chave do dicionário ( ex.: Uri url = urls["google"] )

Cumps

P.S: um Uri é basicamente um objecto que contém o URL e informações adicionais,pode ser tratado quase como uma String.

Editado por jota_wa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ascensao    2
Ascensao

Boas

obrigado pelos exemplos mas resolvi por optar por uma forma primitiva à minha maneira:

int arraySize = lineCount/2;
string[] userCommands = new string[arraySize];
string[] userPaths = new string[arraySize];
string lineContent = null;
int localCommand = 0;
int localPath = 0;

using (StreamReader sr = new StreamReader(userPath))
{
while (sr.Peek() >= 0)
{
	lineContent = sr.ReadLine();

	if (lineLocalization % 2 == 0)
	{
		if (localCommand < userCommands.Length)
		{
			 userCommands[localCommand] = lineContent;
			 localCommand++;
		}
	}
	else
	{
		if (localPath < userPaths.Length)
		{
			userPaths[localPath] = lineContent;
			localPath++;
		}
	}

	lineLocalization++;
}
sr.Close();
}

Editado por Ascensao
GeSHi

Agradeço conselhos e opiniões:

Partilhar esta mensagem


Link 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.