VB 2005 - Werte aus Datei auslesen

Hallo zusammen,

ich habe jetzt schon Stunden in Google verbracht und hoffe nun, dass mir hier geholfen wird:

Ich habe eine Datei, die von oben bis unten mit Wörtern gefüllt ist.
Manche der Wörter fangen mit „$“ an und sollen bis zum Leerzeichen gelesen werden.

Dabei soll noch geprüft werden, ob dieses Wort bereits ausgelesen wurde.

Im Pseudocode soll es also so aussehen:

Wiederhole bis EOF
Lies aus Datei xyz.txt bis "$"
 Lies von "$" bis Leerzeichen
 Wort noch nicht in Array vorhanden?
 Zu Array hinzufügen
Ende Wiederhole

Danke schon mal.

Hallo.

Im Pseudocode soll es also so aussehen:

Wiederhole bis EOF
Lies aus Datei xyz.txt bis „$“
Lies von „$“ bis Leerzeichen
Wort noch nicht in Array vorhanden?
Zu Array hinzufügen
Ende Wiederhole

Also ich würde zuerst alles in einen Array lesen, sprich die komplette Datei und nachher das Array weiterverarbeiten.
Hier mal die Funktion für das Einlesen der Datei

/// 
 /// This functions reads a txt-file from remote or local source 
 /// 
 /// 
 /// al Arraylist
 public static ArrayList readTxtContent(string strFilename)
 {
 ArrayList al = new ArrayList();
 StreamReader SR;
 string S;

 try
 {
 SR = File.OpenText(strFilename);
 S = SR.ReadLine();
 while (S != null)
 {
 al.Add(S);
 S = SR.ReadLine();
 }
 SR.Close();
 }
 catch (Exception ex)
 {
 Console.WriteLine(ex.Message.ToString() + Environment.NewLine);
 } 

 return al; 
 }

Als nächste „get unique values of array“…

Public Function GetUniqueArrayValues(ByVal array() As String) As String()

Dim x, y, n, sa() As Integer

y = -1

n = 0

array.Sort(array)

For Each x In array

If x y Then

ReDim Preserve sa(n)

sa(n) = x

y = x

n += 1

End If

Next

Return sa

End Function

Für das Zeugs mit dem $ usw. verwende IndexOf, LastIndexOf, Substring… Vordefinierte String-Methoden.

Gruß Sebastian

Hallo DarkAngel,

ist die Datei seht groß? Ansonsten kann man das schön mit einem Strig erledigen. Den Inhalt der Datei in einen String lesen. Danach diesen per Split() zunächst in ein Array wandeln, das die Teile zwischen den $ enthält, dann diese per split nach den Blanks zerlegen. Dann gucken ob das Stück schin bekannt ist (geht mit der ArrayList sehr schön!).

So sieht das in c# aus (VB kann ich nicht …)

string text = "sdmlfbskldhb$jlmhbsdlfkmbd $cfbvsdfg bh dfg$ ";
 ArrayList gefundene = new ArrayList();
 foreach (string st1 in text.Split('$'))
 foreach (string st2 in st1.Split(' '))
 if (!gefundene.Contains(st2))
 {
 gefundene.Add(st2);
 }
 foreach (Object obj in gefundene)
 Console.WriteLine(" {0}", obj);

Denke die Typen und Methoden gibt es in VB.net auch. Und das in VB umzuschreiben sollte kein Problem für dich sein :wink:

biba

Dirk.Pegasus

Hallo,

Hi,

warum die Textdatwei nicht Zeile für Zeile einlesen und jede Zeile mit regulärem Ausdruck prüfen?
(Anfang dollarzeichen 1 mal vorhanden dann eine beliebige anzahl von zeichen, und dann ein leerzeichen, einmal vorhanden)

Dann gibt es ne Methode (.Matches)
du bekommst ein string array mit allen gefundenen werten zurück.

davon alle werte durchlaufen. (foreach)
dann einfach abgleich ob dein wert in dem array vorhanden ist.

mfg
Martin

Hi Martin,

danke für den Denkanstoß. Das dürfte es gewesen sein.

mfg