PDA

View Full Version : [c#] leggere righe di file di testo


drasgo
23-08-2013, 22:46
Salve a tutti,
è da un po che non sto usando il c#, e ora che ho riniziato sono un pochetto arrugginito.. In pratica devo prima leggere un file di testo e trovare il numero di righe presenti, e poi, creando un valore random, scegliere casualmente una delle righe del documento e scriverla su una textbox.
Ho riscontrato due problemi: quando leggo il numero di righe mi rida numeri sballati, e poi la frase che compare sulla textbox è sempre la prima del file.
per leggere il numero di righe ho usato tre modi diversi, ma i risultati sono sempre gli stessi.

1 modo:

string frase;
int counter = 0;
while (sr.Peek() != -1)
{
frase = sr.ReadLine();
counter++;
}


2 modo:

string counter = (new StreamReader(filePath)).ReadToEnd().Split('\n').Length;


3 modo:

string frase="";
int counter = 0;
while (frase!=null)
{
frase = sr.ReadLine();
counter++;
}


e poi qui c'è la riscrittura della riga prescelta:

using (StreamReader line = new StreamReader(@"c:/users/" + FuserName + "/desktop/domande.txt"))
{
int lunghezza;
Random casuale = new Random();
int numerocasuale = casuale.Next(1, lunghezza);
string domanda = "";
for (int i = 0; i < 3; i++)
{
domanda = "";
domanda = line.ReadLine();
}
textBox3.Text = domanda;
}

[Kendall]
24-08-2013, 08:52
Io farei così:


public static void Main(string[] argv)
{
FileInfo file = new FileInfo(@"FILENAME");
string[] lines;

using ( var stream = file.OpenText() ) {
lines = stream.ReadToEnd().Split('\n');
}

Console.WriteLine("{0} has {1} lines.", file.Name, lines.Length);

int randomLine = new Random().Next(lines.Length - 1);

Console.WriteLine("Line {0} = {1}", randomLine, lines[randomLine]);

Console.ReadKey();
}


Per semplicità te l'ho scritta come applicazione console, ma il principio è il medesimo.

ESSE-EFFE
24-08-2013, 09:21
Oppure:


static void Main(string[] args)
{
string[] lines = File.ReadAllLines("Test.txt");
Console.WriteLine(lines[new Random().Next(lines.Length)]);
Console.ReadKey();
}