Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [Visual C#] Filtrare un file di testo con un parametro
Forum - C# / VB.NET - [Visual C#] Filtrare un file di testo con un parametro

Avatar
fede123 (Normal User)
Newbie


Messaggi: 1
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 16:05
Lunedì, 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

  1. // apertura log
  2.         private void btnLoad_Click(object sender, EventArgs e)
  3.         {
  4.             richTextBox1.Clear(); //Pulisco in caso apro un secondo file
  5.             OpenFileDialog open = new OpenFileDialog();
  6.             open.Filter = "File di testo (*.txt)|*.txt"; //filtro file di testo
  7.             open.CheckFileExists = true; //controllo l'esistenza del file
  8.             if (open.ShowDialog() == DialogResult.OK)
  9.             {
  10.                 StreamReader sr = new StreamReader(open.OpenFile());
  11.                 richTextBox1.Text = sr.ReadToEnd(); //apro il file in una richtext per visualizzarne il contenuto
  12.                 sr.Close();
  13.                 string[] arraylog = File.ReadAllLines(open.FileName);
  14.                 foreach (string riga in arraylog)
  15.                 {
  16.                     string[] elementi = riga.Split(';');
  17.                     comboID.Items.Add(elementi[0]);
  18.                 }



Grazie a tutti per l'eventuale aiuto

Ultima modifica effettuata da fede123 il 02/04/2012 alle 16:06
PM
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 22:16
Lunedì, 02/04/2012
Potresti usare un for al posto del foreach:
Codice sorgente - presumibilmente Delphi

  1. string nuovoFile = "";
  2. for (int i = 0; i <= arrayLog.Length - 1; i++) {
  3.         string n = arrayLog(i).Split(";")(0);
  4.         //esempio: come filtro usi 2011
  5.         if (n == "2011") {
  6.                 nuovoFile += arrayLog(i) + Environment.NewLine;
  7.         }
  8. }


Non ho testato il codice e nemmeno capito perfettamente cosa vuoi fare; quindi, se ci sono problemi, chiedi ancora :)


PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 10:28
Martedì, 03/04/2012
Puoi usare LINQ:
Codice sorgente - presumibilmente C# / VB.NET

  1. var lines =
  2.     File.ReadAllLines("path")
  3.     .Select(line => line.Split(";"))
  4.     .Where(parts => parts[0] == param)
  5.     .Select(parts => parts[0] + ";" + parts[1] + ";" + parts[2])
  6.     .ToArray();
  7.  
  8. File.WriteAllLines("path2", lines);



"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM