Strings "trimmen" oder filtern

turndevil

Mitglied
Hallo.

Seit einiger Zeit hocke ich jetz schon an einem Programm, dass eine Textdatei (von einem Messgerät erzeugt) einlesen soll, die Messdaten parsen und sie in ein Excelsheet einfügen soll. Die gute Nachricht: Die Behandlung von Textdateien und die Automatisierung von Excel sind mir jetz einigermaßen bekannt. Die schlechte Nachricht: Mit der Behandlung der Zeilen (also Strings) gibts noch ein kleines Problem.

Er macht folgendes:
1. zeilenweise einlesen
2. String.Split(" ".ToCharArray()) auf jede Zeile

Das daraus erzeugte Stringarray enthält aber ausser den Messdaten auch alle Leerzeichen. Nun suche ich einen Weg diese herauszufiltern. Wie würdet ihr an so eine Sache herangehen? Ich habe es schon mit diversen if-Bedingungen (immer eingebettet in eine for-Schleife) probiert aber habe bisher nicht das gewünschte Ergebnis erhalten. Habe ich mit der Split() Methode vielleicht schon falsch angefangen? Oder sollte ich mit Listen arbeiten? (wegen der Remove() Methode usw)

Auf Anregungenwürde ich mich sehr freuen. Wenn es stressmindernd (*gg*) auswirkt dann editier ich nochmal den Post und füge Quellcode und Textdatei hinzu.

Vielen Dank im Voraus.

mfg
tom
 
Hi,

ja, ein wenig Quellcode und eine oder mehrere Zeilen der Textdatei waeren hilfreich.
Kann mir jetzt, erlich gesagt, ueberhaupt nicht vorstellen wie dein String-Array aussieht, geschweige denn deine Ausgangsdaten.
 
Ok kein Problem.
Also die Maschine gibt mir die textdatei "text2.txt" aus. In ihr enthalten sind der Kopf und die Messdaten. Es sollen nur die Messdaten geparsed werden. Das hab ich auch schon hingekriegt.
Sehen wir uns mal die erste Zeile an:

X 0.00751 0.00000 0.00000 0.00000 0.00751 0.00751 0.00751 x1

Wenn ich die jetz per Split(" ".ToCharArray()) bearbeite, gibt er mir ein Stringarray mit folgendem Inhalt aus:

line[0] = leer
line[1] = leer
line[2] = X
line[3] = leer
line[4] = leer
line[5] = leer
line[6] = leer
line[7] = 0.00751
usw.

Perfekt wäre jetz aber ein Stringarray ohne die Leerzeichen. Also:

line[0] = X
line[1] = 0.00751
line[2] = 0.00000
usw.

Jetz poste ich noch ein wenig Quellcode. Den Platz wo ich nicht mehr weiter weiss kommentier ich mal aus.

Code:
using System;
using System.Collections;

namespace DefaultNamespace
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			String line = @"  X    0.00751    0.00000    0.00000    0.00000    0.00751    0.00751   0.00751  x1";
			String[] lineArr = line.Split(" ".ToCharArray());
			
			
			//Hier würd ich gern noch das Array filtern.
			//Villeicht mit Hilfe einer ArrayList? KA
			
			
			Console.Write("\n");
			Console.WriteLine("TEST: {0} + {1} + {2} + {3}", lineArr[0], lineArr[1], lineArr[2], lineArr[3]);
			Console.WriteLine("<<<Länge: {0}", lineArr.Length);
		}
	}
}
 

Anhänge

Hi,

Code:
StreamReader reader = File.OpenText(@"C:\test\TestProjekt\text2.txt");

string zeile = "";
zeile = reader.ReadLine();

while(zeile != null)
{
	string[] temp = zeile.Split(' ');
	string[] daten = new string[9]; // fuer die neun spalten in deiner .txt

	int diff = 0; // die anzahl seit wann der letzte gueltige eintrag gefunden wurde
	int count = 0;

	for(int i = 0; i < temp.Length; i++)
	{
		if(temp[i].Trim() != "" || diff > 9) // wenn neun mal ein "" gefunden wurde, wird eine "spalte" mit leerem inhalt eingefuegt
		{
			daten[count] = temp[i];
			count++;
			diff = 0;
			continue;
		}
		diff++;
	}
	zeile = reader.ReadLine();
}

Da es bei dir vorkommen kann, dass eine Spalte leer ist, hab ich die "diff" Variable noch reingebaut um in deinem Array ebenfalls eine leere "Spalte" zu schaffen.
 
So.
Nochmal danke für den Tipp. Hat prima funktioniert. Aber eine oder zwei Fragen hab ich trotzdem noch.

Eine solche Konstruktion hatte ich auch schon programmiert...also so ähnlich. Nur habe ich den String nich nach Trimmung mit einem Leerstring verglichen, sondern ohne Trimmung mit einem String aus einem Leerzeichen. (woah ich hoffe ich bring das verständlich rüber) Bei dir hats prima geklappt nur meine Methode nicht. Fällt dir da auf die Schnelle ne Antwort ein? Wenn nicht is auch net schlimm.

War auf jeden ein cooler Tipp und jetz haut des. =)

merci
tom
 
Hi,

da du deine Zeile mit " " gesplittet hast, wurden alle Leerzeichen entfernt. Deshalb konnte in deiner if-Abfrage auch nicht danach gesucht werden, sondern nur nach einem absoluten Leer-String ("").

Bei meiner if-Abfrage ist das .Trim() eigentlich ueberfluessig da, wie oben gesagt, schon alle Leerzeichen entfernt wurden.

Ich glaube du muesstest bei dir nur dies aendern: " " -> ""
 
Aaaaah jetz isses bei mir auch angekommen. Ich hab doch bei meinem Code unten folgende Testausgabe:

Code:
Console.WriteLine("TEST: {0} + {1} + {2} + {3}", lineArr[0], lineArr[1], lineArr[2], lineArr[3]);

Ich glaub ich hab übersehen, dass ich zwischen "+" und der Variable ein wenig Platz gelassen habe. Später dann hab ich das als Leerzeichen interpretiert. Dumm eigentlich. Aber was solls.

Danke nochmal für deine Hilfe (und vor allem Geduld *gg*)

mfg
tom
 
Zurück