Laden...

C# und Textdateien

Erstellt von JK_net vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.397 Views
J
JK_net Themenstarter:in
187 Beiträge seit 2005
vor 19 Jahren
C# und Textdateien

Hallo!

Ich habe eine Textdatei vorliegen, die folgendes Format hat:
1|Jens|Kruse|test|1|3|2005|

In diesem Format habe ich Zeile für Zeile Daten stehen. Jetzt möchte ich die Datei von Anfang an durchgehen, und prüfen, ob in dem vorletzten Feld eine 3 (wie oben) oder eine 1 steht.
Wenn eine 1 steht, möchte ich mir den ersten Wert der Zeile (hier 1) in einer ListBox anzeigen lassen (und evtl. auch löschen).

Hat jemand Erfahrung im Umgang mit Textdateien, und könnte mir dabei helfen?

Vielen Dank im Voraus!

MfG
Jens

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo JK_net,

ich denke das ist ein Fall für reguläre Ausdrücke (regular expressions, RE), siehe z.B. Grundsätzliche Fragen zu Regex

Um keine Glaubenskriege ausbrechen zu lassen: Natürlich geht es auch anders.

HTH

herbivore

PS: Textdateien einlesen habe ich jetzt mal vorausgesetzt. Im Zweifel die Doku der Klassen FileStream oder TextReader schauen.

B
44 Beiträge seit 2004
vor 19 Jahren

Also am besten direkt beim einlesen per StreamReader prüfen:



StreamReader sr = new StreamReader(fileName, true);
string line = null;

while ((line = sr.ReadLine()) != null) {
    string[] usr = line.Split('|');
    if (usr[5] == "1") {
        /* Zeige in ListBox  oder lösche*/
    }
}

sr.Close();


So viel zum Anfang... viel Spaß weiterhin!

4.207 Beiträge seit 2003
vor 19 Jahren

Am besten IMHO: Die Datei als CSV-Datei betrachten und in ein Dataset laden. Dann kannst die entsprechenden Datensätze nämlich mit einem einzigen SELECT holen.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

4.506 Beiträge seit 2004
vor 19 Jahren

Hallo Golohaas.de!

Etwas Off-Topic, aber mich interessiert es:

Ich weiß zwar was es bedeutet (nämlich: genauso / in der Art), aber was heißt eigentlich
"IMHO" ausgeschrieben?

Ciao
Norman-Timo

P.S: Vielleicht bin ich zu alt, oder zu jung, um diese Sprache zu sprechen 😉

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

M
456 Beiträge seit 2004
vor 19 Jahren

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.

4.207 Beiträge seit 2003
vor 19 Jahren

IMHO = In my humble opinion

  • oder -
    IMHO = In my honest opinion

Also, "meiner bescheidenen / ehrlichen Meinung nach" ... wie kommst Du auf "genauso"?

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

J
JK_net Themenstarter:in
187 Beiträge seit 2005
vor 19 Jahren

Hallo!

Am besten IMHO: Die Datei als CSV-Datei betrachten und in ein Dataset laden. Dann kannst die entsprechenden Datensätze nämlich mit einem einzigen SELECT holen.

Hast du ein Beispiel, wie das funktioniert?

MfG
Jens

1.373 Beiträge seit 2004
vor 19 Jahren

Nochmal kurz zu "IMHO": www.acronymfinder.com und gut 😁

Zum Thema:
Man kann einfach einen OleDB Treiber benutzen um Textdateien wie "normale" Datenbanken zu interpretieren. Hier mal ein Beispiel:


using System;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;

public class MyClass {

	public static void Main() {
	
		string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;
									Data Source=c:\MeinDatenPfad\;
									Extended Properties=""text;"""; 
									
		using(OleDbConnection conn = new OleDbConnection(ConnectionString)) {
		
			conn.Open();  
			
			OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM Test.txt", conn);  
					
			DataSet ds = new DataSet();
			da.Fill(ds); 
			
			// Daten verwenden
			foreach(DataRow row in ds.Tables[0].Rows) {
				for(int i = 0; i < ds.Tables[0].Columns.Count; ++i){
					Console.Write("{0}, ", row[i]);
				}
				Console.WriteLine();				
			}
		}		
	}
}

In deinem fall (in dem die Daten durch | getrennt sind), müssen wir noch eine schema.ini im selben Verzeichnis wie die Daten ablegen:


; Name der zu konfigurierenden Datendatei:
[Test.txt]
; Daten werden getrennt durch |
Format=Delimited(|) 
; erste Zeile enthält NICHT den Namen der Spalte
ColNameHeader=False 

Interessante links:
http://www.developer.com/net/cplus/article.php/3412961
http://msdn.microsoft.com/library/en-us/odbc/htm/odbcjetschema_ini_file.asp

MfG VizOne

J
JK_net Themenstarter:in
187 Beiträge seit 2005
vor 19 Jahren

Super, vielen Dank!

Ich werde mich mal damit beschäftigen!

MfG
Jens

T
8 Beiträge seit 2005
vor 19 Jahren

nur mal so als zwischenfrage:
wenn man das zeilenweise als string hat, wäre es nicht viel einfacher den substring von der stelle zu bilden???

// signaturplatz zu vermieten! 😉

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo tribal,

Substring ist hier auf jeden Fall nicht so passend, weil man ja mit Trennzeichen und Texten variabler Länge zu tun hat und nicht mit (festen) Positionen und Längen, wie sie bei Substing als Parameter übergeben werden. Natürlich kann man die Positionen mit IndexOf bestimmen, aber da gibt es bessere Lösungen (s.o.).

herbivore

T
8 Beiträge seit 2005
vor 19 Jahren

genau an den substring in kombination mit indexof hatte ich gedacht. hab das neulich erst benutzt, weil ich mir keys so gebastelt habe und die nich mehr anders auseinanderbekommen habe.
aber danke nochmal für die bestätigung... ;o)
muss ja auch die möglichkeiten und unterschiede im kopf abspeichern, bin ja noch am lernen 😁

// signaturplatz zu vermieten! 😉

N
40 Beiträge seit 2005
vor 19 Jahren

hab die version von basster mit dem streamreader und dem splitten verwendet!
funkt einwandfrei! thx!