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
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.
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!
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
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!”
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.
IMHO = In my humble opinion
Also, "meiner bescheidenen / ehrlichen Meinung nach" ... wie kommst Du auf "genauso"?
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
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
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
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! 😉
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
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! 😉
hab die version von basster mit dem streamreader und dem splitten verwendet!
funkt einwandfrei! thx!