terminatorvb
Goto Top

Wie Text in einer Textdatei suchen und benutzen?

Hallo.

Ich arbeite gerne mit Visual Basic und habe auch schon ein Programm geschrieben, was ich auch schon auf "worldofgothic.de" veröffentlicht habe. Hierbei geht es um die Erstellung eines sogenannten NPC-Scripts, mit welchem man im Spiel einen NPC erscheinen lassen kann. Im Programm wurden hauptsächlich Textboxen und Checkboxen verwendet. Speicherfunktion etc. ist alle schon eingebaut. Was mir noch fehlt ist eine Öffnungsfunktion. Ich vermute stark, dafür braucht man einen OpenFileDialog. Wie man den erstellt weiß ich auch schon, aber jetzt geht es darum, dass man in der Text-Datei nach bestimmten Schlüsselwörtern wie 'name = xxx' sucht. Im genannten Beispiel soll das Programm nach 'name = ' suchen und den darauffolgenden Text in die entsprechende Box schreibt. Nur leider weiß ich nicht wie das geht.

Mit freundlichen Grüßen,
TerminatorVB face-smile

Content-Key: 152869

Url: https://administrator.de/contentid/152869

Printed on: April 23, 2024 at 19:04 o'clock

Member: BigWim
BigWim Oct 12, 2010 at 13:52:49 (UTC)
Goto Top
Grundsätzlich bleiben m. E. nur zwei Möglichkeiten.

Deine Textdatei ist wie eine INI-Datei aufgebaut, dann kannst Du Funktionen nutzen wie ReadProfileString, die Ini-Dateien auslesen
In jedem anderen Fall bleibt nichts anderes übrig, als die Datei zeilenweise zu lesen und nach deinen Schlüsselwörtern zu suchen. Z. B. mit InStr

Markus
Member: TerminatorVB
TerminatorVB Oct 12, 2010 at 14:22:40 (UTC)
Goto Top
Kannst du mir vielleicht ein Beispiel für die zweite Möglichkeit "InStr" geben?
Member: bastla
bastla Oct 12, 2010 at 14:25:40 (UTC)
Goto Top
Hallo TerminatorVB und willkommen im Forum!

Wäre es nicht sinnvoller, Du würdest vorweg (auszugsweise) ein Beispiel Deiner Textdatei posten?

Ansonsten würde ich mich nicht mit "InStr()" aufhalten, sondern "Replace()" verwenden ...
[Edit] Zu flüchtig gelesen und angenommen, es sollte in die Datei geschrieben weden. [/Edit]

Grüße
bastla
Member: TerminatorVB
TerminatorVB Oct 12, 2010 at 14:32:52 (UTC)
Goto Top
Alles klar. So sieht ein gewöhnlicher NPC-Script aus:

instance BAU_900_Onar (Npc_Default)
{
------ NSC ------
name = "Onar";
guild = GIL_BAU;
id = 900;
voice = 14;
flags = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_MAIN;

------ Attribute ------
B_SetAttributesToChapter (self, 4);

------ Kampf-Taktik ------
fight_tactic = FAI_HUMAN_STRONG;

------ Equippte Waffen ------
EquipItem (self, ItMw_1h_Bau_Mace);

------ Inventory ------
B_CreateAmbientInv (self);

------ visuals ------
B_SetNpcVisual (self, MALE, "Hum_Head_FatBald", Face_N_OldBald_Jeremiah, BodyTex_N, ITAR_Vlk_H);
Mdl_SetModelFatness (self, 2);
Mdl_ApplyOverlayMds (self, "Humans_Arrogance.mds");

------ NSC-relevante Talente vergeben ------
B_GiveNpcTalents (self);

------ Kampf-Talente ------
B_SetFightSkills (self, 70);

// ------ TA anmelden ------
daily_routine = Rtn_Start_900;
};

FUNC VOID Rtn_Start_900 ()
{
TA_Sit_Throne (09,00,21,00,"NW_BIGFARM_HOUSE_ONAR_SIT");
TA_Sleep (21,00,09,00,"NW_BIGFARM_HOUSE_UP1_04");
};

Nehmen wir als Beispiel wieder 'name' (Linie 4). Es soll gesucht werden wo Name ist und in diesem Beispiel soll "Onar" ausgegeben werden.
Member: bastla
bastla Oct 12, 2010 at 15:12:47 (UTC)
Goto Top
Hallo TerminatorVB!

Schematisch etwa so:
Dim FileName As String = "D:\Onar.txt"  
Dim SearchFor As String = "name" 'Suchbegriff  
Dim Sep = " = " 'Trennung vom Wert  
Dim EOL As String = ";" 'Zeilenende-Kennung  

Dim sr As StreamReader = File.OpenText(FileName) 'Textdatei zum Lesen öffnen ...  
Dim Content As Array = Split(sr.ReadToEnd, vbCrLf) '... und zeilenweise in Array einlesen  
Dim Value As String
For Each Line In Content 'alle Zeilen durchgehen  
    If InStr(Line, SearchFor & Sep) = 1 And Microsoft.VisualBasic.Right(Line, 1) = EOL Then 'beginnt Zeile mit Suchbegriff + Trennung und endet mit Zeilenende-Kennung?  
        Value = Split(Split(Line, Sep)(1), EOL)(0) 'isolieren des interessierenden Teiles  
        MsgBox(Value)
    End If
Next
Zur Erklärung der Zeile 11
In der Variablen "Line" steht für die eingelesene Zeile 4
name = "Onar";"
Die Zeile setzt sich daher zusammen aus:
Suchbegriff ("SearchFor")name
Trennung ("Sep") =
Wert"Onar"
Zeilenende-Kennung ("EOL");

Mit "Split(Line, Sep)" wird zunächst anhand der Trennung " = "geteilt in
Teil 0: name
Teili 1: "Onar";
Verwendet wird davon Teil1, deswegen der Zusatz "(1)"

Dieses Zwischenergebnis wird nochmals gesplittet, wobei hier als Trennzeichen ";" (EOF) verwendet wird (Annahme: ";" kommt nur am Zeilenende vor) - da das zum Splitten verwendete Zeichen wegfällt, ist das Ergebnis nur noch
Teil 0:"Onar"

Grüße
bastla
Member: TerminatorVB
TerminatorVB Oct 12, 2010 at 16:13:01 (UTC)
Goto Top
Ahh. Herzlichsten Dank genau sowas habe ich gesucht, allerdings will ich bei Filename nicht Onar.txt nehmen, weil das ist ja nicht der einzige NPC den es gibt. Ich hatte eigentlich die Idee da dann OpenFileDialog.FileName reinzuschreiben. Das müsste doch funktionieren oder?
Und nochwas: Wie mache ich da dann weiter um die anderen Sachen abzufragen?
Member: bastla
bastla Oct 12, 2010 at 16:38:36 (UTC)
Goto Top
Hallo TerminatorVB!

Wie vorweg angeführt, soll der Ansatz oben eine schematische Darstellung (möglicher Techniken) sein - insbesondere, da mir noch nicht so ganz klar ist, was dann noch weiter passieren soll, musst Du Dir natürlich selbst die entsprechenden Ergänzungen / Änderungen überlegen ...
Wie mache ich da dann weiter um die anderen Sachen abzufragen?
Das ist vor allem Definitionssache: Was sind die "anderen Sachen"? Soferne Du die Zeilen 5 bis 9 meinst, entsprechen diese ja dem obigen Schema, sodass Du den Codeschnipsel als "Function" mit Übergabe des "Content"-Arrays und des Suchbegriffes und Rückgabe des Wertes verwenden könntest ...

Grüße
bastla