Array aus Datei einlesen
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
pileBetreff: Array aus Datei einlesen |
Fr, Aug 17, 2018 23:04 Antworten mit Zitat |
|
---|---|---|
Hallo, ich habe nach laaanger Zeit mal wieder mit Blitz angefangen und mich nun etwas in BlitzMax eingearbeitet.
Ich haben nun folgendes Problem: Ich muss eine Datenbank in mein Programm einlesen. Diese will ich aber in einer Datei auslagern. Es handelt sich um Strings, und was Strings angeht, bin ich hier auf Multi-Dimensional Auto Arrays gestoßen. Das sieht halt so aus: Code: [AUSKLAPPEN] Local string_array:String[][] = [["Bob","Kate","Percy"],["Cecil","Edmund","Elizabeth"]]
Print string_array[0][2] 'this will print Percy Nun möchte ich in meiner Datei für jede Klammer eine Zeile nutzen. Wenn also in der ersten Zeile Code: [AUSKLAPPEN] Bob,Kate,Percy und in der zweiten Zeile
Code: [AUSKLAPPEN] Cecil,Edmund,Elizabeth in der Datei steht, wie lese ich das dann korrekt ins Array ein?
|
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
XeresModerator |
Fr, Aug 17, 2018 23:13 Antworten mit Zitat |
|
---|---|---|
Strings haben eine split methode, damit kann man eine eingelesene Zeile am Komma aufteilen. Falls das Trennzeichen im Text vorkommen könne soll, muss man was komplizierteres selber basteln. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Midimaster |
Sa, Aug 18, 2018 9:41 Antworten mit Zitat |
|
---|---|---|
Hier mal ein Beispielcode:
BlitzMax: [AUSKLAPPEN] SuperStrict |
||
pile |
Sa, Aug 18, 2018 17:24 Antworten mit Zitat |
|
---|---|---|
Vielen Dank für die Antworten sehr hilfreich.
Gibt es eigentlich eine Suchfunktion für Arrays die mir die Position des Suchbegriffs im Array ausgibt? Da ich mir vorstellen kann, dass es keine Funktion geben wird, hab ich dazu das Wort "Suchbegriff" als erste Zeile in die Datei eingefügt mir jetzt mal schnell eine Schleife dafür zusammengebastelt: Code: [AUSKLAPPEN] Print CrLF$ + "------------------------" + CrLF$ + "Suchbegriff wird gesucht:"
For Local i:Int=0 To tempZeile.Length-1 If tempZeile[i] = "Suchbegriff" Print "Suchbegriff wurde in Zeile " + i + " gefunden." Else Print "Suchbegriff wurde nicht gefunden" EndIf Next Print "Ende der Suche" Leider konnte so nix gefunden werden, obwohl das Wort eindeutig als Zeile in der Datei steht. |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
Midimaster |
So, Aug 19, 2018 0:43 Antworten mit Zitat |
|
---|---|---|
Dein Code funktioniert bei mir. Allerdings schreibt er noch 2x ""Suchbegriff wurde nicht gefunden" für die anderen beiden Zeilen darunter. Besser wäre es nach einem Treffer die Suche abzubrechen:
BlitzMax: [AUSKLAPPEN] .... Und Dein Code funktioniert nur, wenn der Suchbegriff als einziges Wort in der Zeile steht. Wenn Du z.b. nach "Edmund" suchen willst, ist INSTR() die richtige Funktion: BlitzMax: [AUSKLAPPEN] .... |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
pile |
Di, Aug 21, 2018 15:10 Antworten mit Zitat |
|
---|---|---|
Hallo,
bei mir funktioniert es weiterhin nicht. Ich poste mal den kompletten Code, wahrscheinlich ergibt sich dadurch der Fehler: BlitzMax: [AUSKLAPPEN] SuperStrict Und der Inhalt von "Datenbank.txt" ist halt folgendender: Code: [AUSKLAPPEN] Bob,Kate,Percy Suchbegriff Cecil,Edmund,Elizabeth Test1 |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
Midimaster |
Di, Aug 21, 2018 17:54 Antworten mit Zitat |
|
---|---|---|
Der Zeilumbruch besteht in einer "*.txt"-Datei nicht aus dem einen Zeichen "~n" sondern aus zwei Zeichen "~r~n"
Also musst Du im Code noch ändern: BlitzMax: [AUSKLAPPEN] ... |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
pile |
Di, Aug 21, 2018 19:11 Antworten mit Zitat |
|
---|---|---|
Vielen Dank, darauf wäre ich ja nie gekommen. Gibt es nochmehr solcher Unterschiede zwischen den Dateitypen? Gibts da ne Liste für oder etwas anderes um sich einzulesen?
BlitzMax: [AUSKLAPPEN]
Achja wo es mir gerade auffällt. Die Variable CrLF$ hat ja das $-Zeichen. Heißt das, damit ist sie dann automatisch als String deklariert? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
Di, Aug 21, 2018 19:21 Antworten mit Zitat |
|
---|---|---|
Das mit dem ~n und ~r~n hängt eher vom Betriebssystem und/oder verwendetem Programm ab als vom Dateityp.
~n ist typisch für Unix-basierte Systeme (z.B. Linux, MacOS), ~r~n ist typisch für Windows. Eine .txt hat also höchstwahrscheinlich nur ~n für Umbrüche wenn sie unter Linux erzeugt wurde, unter Windows vermutlich aber ~r~n. In den meisten Programmen kann man die Umbrüche aber auch einstellen. Man sollte also immer mit beiden Varianten rechnen und umgehen können und es eben nicht von der Dateiendung abhängig machen. https://de.wikipedia.org/wiki/Zeilenumbruch Eine Lösung ist z.B. das ~n als Trennzeichen zu nehmen und zusätzliche ~r am Anfang/Ende der Zeile wegzuwerfen. |
||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
XeresModerator |
Di, Aug 21, 2018 19:26 Antworten mit Zitat |
|
---|---|---|
Das hat nichts mit Dateitypen zu tun. Das sind Betriebssystemspezifika, die historisch so gewachsen sind. Pfade in Unix werden mit / getrennt, in Windows mit \ - muss man halt dran denken.
Der Lesbarkeit wegen, würde ich Variablen/Typen immer in Langform Deklarieren (also "var:string"). Die Symbole gibt's noch weil sie in BlitzBasic drinne waren. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
DAK |
Do, Aug 23, 2018 12:13 Antworten mit Zitat |
|
---|---|---|
Datenstrukturen in Files schreiben ist nicht immer ganz trivial, besonders wenn man beliebige Werte reinschreiben können will.
Eine gute (und weit verbreitete) Variante dazu ist JSON. In JSON kann man beliebige Strings, Integers, Arrays und Maps (die beinhalten Schlüssel-Wert-Paare) reinschreiben. Ich hab per Google zwei Varianten davon gefunden, die beide OK funktionieren sollten: https://github.com/mahan/bmx-json https://github.com/Trylobot/bmx-rjson Das Zweite sollte etwas besser sein. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group