
fede123 (Normal User)
Newbie
    
Messaggi: 1
Iscritto: 02/04/2012
|
Salve a tutti,
sto facendo un programma con lo scopo di semplificarmi il lavoro che deve praticamente filtrare un file di testo .txt formattato in una certa maniera (è un log quindi è un insieme di stringhe tutte uguali) dato un parametro che è il primo campo delle righe del log in questione.
Per intenderci ho un file di testo del tipo:
codice;misura;altricampi
1992;54;ac;
1992;54;ac;
2011;54;ac;
2011;54;ac
8711;88;ac
Io devo scegliermi dal programma il codice (1992,2011,8711) e crearmi un nuovo file di testo che conterrà solamente le righe del parametro che ho scelto
P: 2011;54;ac;
Il nuovo file sarà:
2011;54;ac;
2011;54;ac;
Per ora mi sono bloccato proprio sul filtraggio perchè non riesco a trovare metodi o soluzioni che fanno al caso mio.
Inoltre vorrei usare un hashset per popolare la combobox dalla quale sceglierò il parametro in modo da caricarla con solo elementi univoci, ma non riesco a capirne l'utilizzo nel mio caso nonostante abbia capito gli esempi messi a diposizione dal supporto.
Codice sorgente - presumibilmente Delphi |
// apertura log private void btnLoad_Click(object sender, EventArgs e) { richTextBox1.Clear(); //Pulisco in caso apro un secondo file OpenFileDialog open = new OpenFileDialog(); open.Filter = "File di testo (*.txt)|*.txt"; //filtro file di testo open.CheckFileExists = true; //controllo l'esistenza del file if (open.ShowDialog() == DialogResult.OK) { StreamReader sr = new StreamReader(open.OpenFile()); richTextBox1.Text = sr.ReadToEnd(); //apro il file in una richtext per visualizzarne il contenuto sr.Close(); string[] arraylog = File.ReadAllLines(open.FileName); foreach (string riga in arraylog) { string[] elementi = riga.Split(';'); comboID.Items.Add(elementi[0]); }
|
Grazie a tutti per l'eventuale aiuto
Ultima modifica effettuata da fede123 il 02/04/2012 alle 16:06 |
|

GN (Member)
Guru
    
Messaggi: 772
Iscritto: 30/04/2011
|
Potresti usare un for al posto del foreach:
Codice sorgente - presumibilmente Delphi |
string nuovoFile = ""; for (int i = 0; i <= arrayLog.Length - 1; i++) { string n = arrayLog(i).Split(";")(0); //esempio: come filtro usi 2011 if (n == "2011") { nuovoFile += arrayLog(i) + Environment.NewLine; } }
|
Non ho testato il codice e nemmeno capito perfettamente cosa vuoi fare; quindi, se ci sono problemi, chiedi ancora
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
Puoi usare LINQ:
Codice sorgente - presumibilmente C# / VB.NET |
var lines =
File.ReadAllLines("path")
.Select(line => line.Split(";"))
.Where(parts => parts[0] == param)
.Select(parts => parts[0] + ";" + parts[1] + ";" + parts[2])
.ToArray();
File.WriteAllLines("path2", lines);
|
|
|