[Visual Basic]

Sowas geht nicht.

Du musst deine Kriterien nach denen du die Datein in ein Liste/Array schreiben willst in ein If-Anweisung schreiben.
Was du schreibst geht nur in einer Datenbank wo man schreiben kann:
PHP:
mysql_query("SELECT * FROM `table` WHERE `date`='03.07');
Aber das ist das besondere an einer Datenbank. Sie kann sich selbst verwalten.

Könntest ja eventuell ein script schreiben was 1 mal am tag ausgeführt wird und alle neuen Datein in die Datenbank einträgt und dann hättest du keine Performanceprobleme mehr wenn du die Datein ausliest.

MFG

tewes
 
das geht nicht. Ich hab keine Datenbank zur Verfügung.
Kann ich nicht sagen:

lese alle dateinamen, die so oder so heißen des Ordners Sowieso in ein Array ein?
das kann doch nicht sein :freak: :freak:
 
Klar kannst du das sagen. Aber du müsstest aber trotzdem jede datei überprüfen da du die Bedingungen nur mit einer if-Anweisung darstellen kannst.

Also so:
Code:
Dim FileList As new List(of Files)
For Each file As File in Directory.GetFiles(pfad)
If file.Name = "xyz.txt" THEN
FileList.Add(file.Name)
EndIF
End Loop

Datenbanken gibts genug im Netz.
Kann dir Xampp empfehlen. Ist ganz leicht zu konfigurieren.

MFG

tewes
 
Ok. Ich versuch dir mal zu helfen. Irgendwie will sich hier niemand so richtig Mühe geben.
Wobei ich dir ne Doku empfehlen würde. Oder lade dir Visual Studio Express runter, welches es gratis gibt. Dann würdest du sehen, dass die GetFiles-Methode drei Überladungen hat. Unter anderem kannst du bei der zweiten Überladung ein Suchmuster angeben. Ich mache dir mal den Code mit C# rein. Den genauen VB-Syntax kenne ich gerade nicht, aber dies umzuschreiben sollte kein Problem sein. Denn schliesslich benutzt du mit VB die selben Klassen. Okey. Here you go:

Code:
foreach(string datei in Directory.GetFiles(@"c:\temp","*.txt"))
{
       FileInfo fi = new FileInfo(datei);
       if (fi.CreationTime > DateTime.Now) // Okey, ich weiss: völlig unlogisch ;-)
      {
           //mach was
      }
}

Hope this helps.
 
Zuletzt bearbeitet: (Code edit.)
@ tewes hier befinden sich ja wieder alle dateinamen im Array

@ Deppsleep genau sowas wollte ich haben Eben nur den Syntax für VB.

Ich hab jetzt auch gesucht, aber nix gefunden.
(werd aber jetzt noch weitersuchen!)
For Each dateien in Directory.GetFiles(pfad, "*xxx*")

klappt nicht.

Ich will mir eigentlich Visual Studio Express nicht runterladen.
(was ist hier der nachteil zum "normalen" Visual Studio?)

Aber diese Dokumentation gibts ja auch online, nur wo?

Edit:

Also ich hab rausgefunden, dass man diese Einschränkung anscheinend nur mit angabe einer dateiendung machen kann.

Ich hab jetzt allerdings folgendes Problem:
Quellcode:

Dim i as Integer
i = 0
Dim dateien as Object

For Each dateien in Directory.GetFiles(pfad, "X*.dat")
dateien = Directory.GetFiles(pfad, "xxx*.dat")
Dim datei As System.IO.StreamReader = System.IO.File.OpenText(dateien(i))

Dann bekomm ich allerdings folgende Fehlermeldung:

Ausnahme System.IndexOutOfRangeException wurde im ausgeführten Programm ausgelöst:
Der Index war außerhalb des Arraybereichs.

Ich verstehe nicht warum, kann mir das einer sagen?
 
Zuletzt bearbeitet:
UnBreakable schrieb:
For Each dateien in Directory.GetFiles(pfad, "*xxx*")

klappt nicht.

Doch, das muss klappen! Oder warte... Unter welchem Framework willst du das machen? .NET2, oder .NET1.1? Vielleicht gibts da noch einen Unterschied... Ansonsten ist der Aufruf der Methode unter VB wie unter C# genau gleich! Und damit du auf die Eigenschaften der Dateien zugreifen kannst, musst du jeweils davon FileInfo-Objekte erstellen. Die Objekte kannst du dann in eine generische List vom Typ FileInfo speichern und weiterverarbeiten. Generische Listen gibts aber erst ab .NET2. Vergiss das mit den Threads. Das verlangsamt die Sache nur, da gleichzeitige Zugriffe auf die Platte erfolgen!

Also im Prinzip ist dein Vorhaben simpel. Nur ich weiss, wie verzweifelnd das ist, wenn man den Umfang und Inhalt eines Frameworks nicht kennt. Wenn du weiter planst Sachen zu programmieren, kauf dir doch ein Lernbuch für VB.NET. Fachbücher sind nicht billig, aber erleichtern einem der Einstieg in eine Programmiersprache erheblich.

Noch zu Visual Studio Express. Die Nachteile der Express-Version müssen dich nicht kümmern. Ich nehme nicht an, das du Windows-Dienste schreiben willst und gross mit Datenbanken arbeitest. Für den Heimgebrauch reicht die Express-Version locker! Und ich denke es gibt nichts besseres....

So long.
 
ich Vollidiot hatte eine schreibfehler in meinem Befehl.
Jetzt funktionierts so wie ich mir das vorgestellt hab.
Ist es eigentlich möglich in dem Filter irgendwie Vergleiche oder ähnliches darzustellen?

Ich hatte eigentlich schon vor mal Daten in eine SQL Datenbank zu schreiben.
Windows-Dienste zu schreiben, wollte ich mir mal anschaun und dann austesten, jenachdem wie kompliziert das ganze ist.

Irgendwann später vielleicht mal was mit einer grafischen Oberfläche machen, das interessiert mich allerdings mommentan nicht weiter.
 
Nein, in dieser Methode kannst du keine weiteren Vergleiche anstellen. Deshalb musst du ja
auch von jeder einzelnen Datei ein FileInfo-Objekt erstellen.
 
Ok, jetzt nur nochmal zu meinem Verständis:
Wieso kann ich nicht die zeile

dateien = Directory.GetFiles(pfad, search)

außerhalb der Datei stehen lassen sondern muss in in meiner Schleife

For Each dateien in Directory.GetFiles(pfad, search)

angeben?
beim befehl

dateien = Directory.GetFiles(pfad, search)

speichert er doch alle dateinamen die dem suchmuster entsprechen und sich in diesem pfad befinden in das array, oder nicht?
 
Zuletzt bearbeitet: (rechtschreibfehler)
Weil du da nur ein String-Array erhälst. Also nur ein Array mit den Dateipfade. Aber wenn dir das reicht, ist ja ok. Aber ich dachte es geht dir darum, die Dateien nach einem gewissen Kriterium zu sortieren.
 
sorry, ich meinte nicht datei sondern Schleife!
also warum ich den befehl
dateien = Directory.GetFiles(pfad, search)
nicht außerhalb der Schleife stehen lassen kann.

Ich hab jetzt noch 2 Fragen:
1:
Kann ich, und wenn ja wie, die Größe meines Konsolen Fensters bzw. Farben von Hintergrund bzw. Text ändern?
2: Kann ich bei System.Console.ReadLine einen Standardwert setzen, denn dann der Anwender rauslöschen kann und was anderes reinschreiben, bzw. gleich enter drücken, falls dieser Wert gewünscht wird?
 
Zu 1: Guck dir die Members von der Console-Klasse an. Dann kommst selber drauf....
Zu 2:
Code:
Console.Write("Default");
Console.SetCursorPosition(0, Console.CursorTop);
string returnValue = Console.ReadLine();
Wenn returnValue leer ist, dann nimmst den Default-Wert.
Logo, oder?
 
Zu 1: Ok, schau ich mir an.
Zu 2:

Ich hätte aber gerne, dass da bereits etwas steht, was dann nurnoch abgeändert werden muss!
z.B. 01245
und der "Benutzer" muss dann nurnoch eine 6 eingeben, dass man dann auf
012456 kommt! Ist das möglich?
 
So auf die Einfache geht das wohl nicht. Da musst du wohl oder übel den returnValue mit dem DefaultValue abgleichen. Vielleicht gibts aber doch noch ne elegantere Lösung. Komme aber grad net drauf, da mir meine voll verschnupfte Birne dröhnt. :(
Mal gucken. Vielleicht kommt mir morgen was in den Sinn.... Ich mach jetzt mal Feierabend. ;)
 
also ich hab mir jetzt gedacht, ich mach das ganze konfigurierbar über eine .ini oder ähnliches!

Ich könnte das ganze dann per Substring usw. auf diese Datei machen.
MIch würd jetzt nur interessieren, wie das in "professionellen" Programmen mit diesen ini´s gehandhapt wird.
 
UnBreakable schrieb:
MIch würd jetzt nur interessieren, wie das in "professionellen" Programmen mit diesen ini´s gehandhapt wird.

Unter .NET gibts den ConfigurationManager der für solche Sachen gedacht ist. Den findest du im Namespace "System.Configuration". Dazu brauchst du noch ein "Application Configuration File".
Für benutzerdefnierte Einstellungen sind dann die Settings-Files zu gebrauchen.
Das Config-File wie auch das Settings-File sind reine XML-Dateien und werden unter VS2005 beim neu Hinzufügen automatisch erstellt.
 
so, nachdem ich jetzt länger keine Zeit hatte, versuch ich jetzt mal ein bisschen weiter zu kommen.
Das mit dem Konfigurierbar machen schieb ich jetzt erstmal nach hinten.

Ich hab jetzt allerdings ein anderes Problem:

Ich suche ja nach einer Position einer bestimmten Zeichenfolge:

pos = InStr(inhalt, ":VV+")

jetzt kommt allerdings in meiner variable (inhalt) die Zeichenfolge :VV+ öfter vor.
Wie kann ich jetzt z.B. die 2. Position dieser Zeichenfolge in meiner Variable herausfinden?
(bzw. die 3., 4. usw.)
 
Ok, ich habs jetzt gelöst!
Wie kann ich schlecht erklären, wär zu kompliziert.

Kann ich irgendwie eine Zeichenkette ausgeben, die sich zwischen 2 Bestimmten Zeichenketten befindet?

also z.B.

:234:


dass ich dann das 234 ausgebe...
 
Ja kannst du.
Die einfachst Möglichkeit, die mir grade einfällt wäre mit InStr die Position der : herauszufinden und dann mit Mid(Position d. ersten Zeichens, Länge) den String in der Mitte zu extrahieren.

Ich hab eine Funktion geschrieben (Schnell hingeschrieben sicher nicht optimal, aber funktioniert ;) ):

Code:
Function MidExtract(ByVal GanzerString, ByVal Zeichen)
On Error GoTo 77
Dim zwstring As String, pos1 As Integer, pos2 As Integer
pos1 = InStr(GanzerString, Zeichen) + 1
pos2 = InStr(Replace(GanzerString, Left(GanzerString, pos1), ""), Zeichen) + Len(Left(GanzerString, pos1))
zwstring = Mid(GanzerString, pos1, pos2 - pos1)
Return zwstring
77: Return "error"
End Function

Du gibst als Argumente den String in dem deine Zeichen drinsind an und das Zeichen zwischen dem dein String steht.

mfg Backslash
 
Zuletzt bearbeitet:
Zurück
Oben