Jump to content
Moneybag

Text File to Array 2D

Recommended Posts

Moneybag

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.

Share this post


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

Share this post


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

Edited by jota_wa

Share this post


Link to post
Share on other sites
Moneybag

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();
}

Edited by Ascensao
GeSHi

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.