Hiho,
ich habe mir eine Textdatei in eine List<String> eingelesen. Eine Zeile der Textdatei sieht so aus:
001*Ja|002*ungerade|005*aussen|022*21.02.14|023*09:17:53|024*065|025*50|030*0|031*33301050|032*D|033*RKW|036*u|037*103203|038*1D|043*J
diese habe ich per .Split('|') in ein String-Array "gepackt" und hole mir bestimmte Werte aus einer festen Arrayposition:
...
for (int i=1; lText.Count>i; i++)
{
bool test1 = lText.Contains("GELOESCHT");
if (test1 == true)
continue;
string[] ZeileList = lText.Split('|');
ListViewItem lvi = new ListViewItem();
lvi.Text = ZeileList[51].ToString();
lvi.SubItems.Add(ZeileList[50].ToString());
lvi.SubItems.Add(ZeileList[49].ToString());
ArchivList.Items.Add(lvi);
...
}
Problem hierbei ist, dass die Werte am liebsten durch die "Feldnamen" (00x*) - die aber nicht alle da sein müssen- ausgelesen werden sollen
Mit ".Contains" könnte ich auf Vorhandensein testen und mir dann das Splitten der Zeile sparen, nur wie teste ich z.B. auf "031*" und lese dann nur den Wert bis zum nxt. Separator "|"??
EDIT: habs jetzt so aber geht bestimmt eleganter??:
for (int i=1; lText.Count>i; i++)// nur ab der 2.ten Zeile einlesen i=1
{
bool test1 = lText[i].Contains("GELOESCHT"); // is true??
if (test1 == true)
continue;
ListViewItem lvi = new ListViewItem();
// string[] ZeileList = lText[i].Split('|');
string Feldn = lText[i].Substring(lText[i].IndexOf("024*")+4, Convert.ToInt32(lText[i].Substring(lText[i].IndexOf("024*")+4).IndexOf("|")));
string Feldn1 = lText[i].Substring(lText[i].IndexOf("033*") + 4, Convert.ToInt32(lText[i].Substring(lText[i].IndexOf("033*") + 4).IndexOf("|")));
string Feldn2 = lText[i].Substring(lText[i].IndexOf("052*") + 4, Convert.ToInt32(lText[i].Substring(lText[i].IndexOf("052*") + 4).IndexOf("|")));
lvi.Text = Feldn2;
lvi.SubItems.Add(Feldn1);
lvi.SubItems.Add(Feldn);
ArchivList.Items.Add(lvi);
}