Eine Codezeile auf zwei Zeilen verteilen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Wipffinder

Betreff: Eine Codezeile auf zwei Zeilen verteilen

BeitragMi, Feb 12, 2014 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen
Ich bin neu in diesem Forum kenne BlitzBasic aber bereis seit einiger Zeit.

Nun bin ich auf ein Problem gestossen.
Ich möchte einem string einen sehr langen Text zuweisen. Nun könnte man alles auf eine Zeile schreiben. Es wäre aber viel übersichtlicher wenn man den Text auf mehrere Zeilen im Code verteilen könnte.

SuFu hat leider nichts ausgespuckt, aber vielleicht habe ich nur die falschen Begriffe gesucht.

BlitzBasic: [AUSKLAPPEN]

;einem string wird ein sehr langer Text zugewiesen
textchen$ = "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla und noch viel mehr"

;übersichtlicher wäre es so
textchen$ = "bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla"

;wie geht das? Wenn überhaupt

 

Matthias

BeitragMi, Feb 12, 2014 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Wipffinder.

Willkommen im Forum.
Du kannst Strings Addieren.
Code: [AUSKLAPPEN]

   
textchen$ = "bla bla bla bla bla bla bla bla bla"
textchen$ = textchen$ +"  bla bla bla bla bla bla bla bla bla"


Mfg Matz. Smile
 

Wipffinder

BeitragMi, Feb 12, 2014 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die sehr schnelle Antwort!

Stimmt das geht. Aber geht das "eleganter"?
Sonst mache ich es so
 

Matthias

BeitragMi, Feb 12, 2014 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein. Leider nicht.

Unter BlitzMax geht das mit .. Aber unter BlitzBasic leider nicht.

BladeRunner

Moderator

BeitragMi, Feb 12, 2014 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Standard IDE kann das nicht, aber schau Dir mal IDEal an, die IDE hat einen line-wrapping-mode.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Wipffinder

BeitragMi, Feb 12, 2014 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, versuche mal IDEal

Dottakopf

BeitragDo, Feb 13, 2014 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Defenetiv IDEAL.. mit der Standard IDE sollte man auf keinen fall Blitzbasic 3D Coden.
Nimm dir die Zeit IDEAL zu konfigurieren. Ohne das ist coden absolsut bescheiden.
Rechtschreibfehler gelten der allgemeinen Belustigung!

Thunder

BeitragDo, Feb 13, 2014 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann willkommen im Forum! Was für ein Glück, dass noch manche den Weg hierher finden

Nein, BlitzMax kann das auch nicht. Tatsächlich ist es so, dass weder BB noch BMax erlauben, ein Stringliteral auf mehrere Zeilen zu verteilen. Es wäre natürlich nützlich.
Über IDEal kann ich nichts sagen - außer, dass es mir unbequem war. Umwege direkt in BB sind:
- Das was Matthias schon gesagt hat ist wahrscheinlich am hilfreichsten. Selbst wenn es sehr viel Text ist kannst du den Code auch in eine eigene Codedatei auslagern und mit Include laden.
Code: [AUSKLAPPEN]
txt$ = "abcdefghijkl"
txt = txt + "mnopqrstuvwxyz"

Möglich wäre aber auch:
- In einer Datei oder
- in Data-Blöcken speichern und von dort laden:

BlitzBasic: [AUSKLAPPEN]

Local file = ReadFile("langer_string.txt")
Local txt1$ = ReadLine(file)
CloseFile file

; oder

Local txt2$, s$
Restore langer_string
Repeat
Read s
If s = "" Then Exit
txt2 = txt2 + s
Forever
Print txt2
WaitKey

.langer_string
Data "Das ist ein ..."
Data "superlanger ..."
Data "string und so ..."
Data "der nicht in eine Zeile passt ..."
Data ""
  • Zuletzt bearbeitet von Thunder am Do, Feb 13, 2014 23:53, insgesamt 2-mal bearbeitet

BladeRunner

Moderator

BeitragDo, Feb 13, 2014 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Bmax:
Code: [AUSKLAPPEN]
SuperStrict
Local s:String = "bla" + ..
            "Blub"
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Thunder

BeitragDo, Feb 13, 2014 23:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du verkettest zwei Strings mit Plus, das ist nicht unbedingt das, wonach Wipffinder gefragt hat, aber es ist wahrscheinlich der beste Umweg. Ich editiers dazu, dass ich meine Vorschläge anders gemeint hab. In D gibts z.B. dreifache Anführungszeichen:
Code: [AUSKLAPPEN]
string x = """ hier beginnt ...
...
... und hier endet der string""";

Wollte nur sagen, dass es sowas in BB und BMax nicht gibt.

O_o mein tausendster Beitrag, möge das Portal noch lange überdauern! Very Happy
 

Wipffinder

BeitragFr, Feb 14, 2014 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@Thunder

BlitzBasic: [AUSKLAPPEN]
Local file = ReadFile("langer_string.txt")
Local txt1$ = ReadLine(file)
CloseFile file


Super Lösung, genau das was ich brauche!

Nun noch eine kleine weitere Frage.
Muss man den stream file unbedingt wieder mit CloseFile() schliessen? Oder schliesst sich der stream falls man einen neuen öffnet?
Zur Info, ich öffne in meinem Prog sehr häufig eine Datei.

DAK

BeitragFr, Feb 14, 2014 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Schließen ist schon gut, weil wenn du das nicht tust hat dein Programm einen Lock auf der Datei bis dein Programm geschlossen wird. Dadurch kann kein anderes Programm die Datei überschreiben oder löschen.
Beim öffnen eines neuen Streams wird der Alte nicht automatisch geschlossen. Man könnte ja z.B. mehrere Streams parallel offen haben wollen.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Wipffinder

BeitragFr, Feb 14, 2014 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
einen Lock auf der Datei


Heisst das, dass die Datei für einen Schreib/Lesezugriff geöffnet ist ohne dass sie in den RAM geladen wird? Die anderen Load Befehle von B3D schreiben die geöffnete Datei in den Arbeitsspeicher glaube ich zumindest (LoadTexture, LoadMesh, LoadSound etc.)

Thunder

BeitragFr, Feb 14, 2014 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ReadFile, OpenFile und WriteFile sind Befehle, mit denen du direkt auf Dateien arbeiten kannst und sie liefern einen Handle auf einen Stream zurück.
Die Datei wird nicht in den RAM geladen, wenn sie gelesen wird, sondern stückweise von der Festplatte über den Stream gelesen. Je nachdem welche Einheiten du lesen willst, stehen dir ReadByte, ReadShort, ReadInt, ReadFloat, ReadLine und ReadString zur Verfügung.
Solange du den Stream auf eine Datei nicht schließt und dein Programm läuft, kannst du die Datei im Normalfall nicht über ein anderes Programm löschen (also im Explorer z.B.) und auch nicht schreibend auf sie zugreifen.

Wenn du du den einen Stream nicht mehr brauchst und dann einen anderen in derselben Variable öffnest:
BlitzBasic: [AUSKLAPPEN]
Local file = ReadFile("langer_string.txt")
Local txt1$ = ReadLine(file)
file = ReadFile("kurzer_string.txt")
;...


dann geht dir der erste Handle verloren und der Stream bleibt offen, bis dein Programm beendet ist.
Es ist also nicht nur eine Sache des guten Stils, dass man Sachen, die man aufgemacht hat, auch wieder schließt Wink

Edit: Und wenn dein Programm häufig eine Datei öffnet, solltest du dir überlegen, ob sie nicht offengelassen werden kann. Nur, wenn es das Programm nicht unnötig komplizierter macht.
 

Wipffinder

BeitragFr, Feb 14, 2014 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! Nun verstehe ich die ganze Sache besser.

DAK

BeitragFr, Feb 14, 2014 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@Häufig eine Datei öffnen: Ich würd mir da eher Gedanken darum machen, ob man die Datei wirklich so oft auslesen muss oder ob es nicht genügt, die Datei ein Mal ganz auszulesen und die Daten davon dann in ein Array oder ein paar Variablen zu packen.
Dann bäuchtest du es nicht die ganze Zeit offen haben und auch nicht so oft öffnen.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group