String-Problem...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: String-Problem...

BeitragDi, Jul 20, 2010 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
sry wegen des Komischen Titels, aber mit ist kein besserer eingefallen. Mein Problem:

Ich benutze Readline() um eine Zeile aus einer Datei auszulesen. Jetzt ist die Zeile aber Variabel und kann vom Nutzer geändert werden. Ich möchte nur wissen, ob überhaupt etwas in der zeile steht. Also habe ich folgende bedingung geschrieben:

Code: [AUSKLAPPEN]

      If anfangderdatei2 > 0 Then
         
         Print "Funktion Vollständig!"
         Print "Missionsname: '" + anfangderdatei2 + "'"
         
         WaitKey()
         End
         
      Else
         
         Print "Error: Die Funktion ist nicht Vollständig!"
         Print "Die Datei kann nicht kompiliert werden, bitte überprüfen!"
         Print "Zum Beenden bitte eine Taste drücken"
         Print "(C) by Otto-Soft Productions"
         
         WaitKey()
         End
         
      EndIf


leider funktioniert das nicht nos wie ich mir das vorgestellt habe.
Es kommt immer nur das raus, was hinter dem Else steht, egal wieviel in der Datei steht.

Und noch eine Frage zu ReadLine():

ich habe schon vor dem gesendenten code einmal Readline geschrieben. 'Weiß' das Readline in meinem gesendeten Code nun, dass es erst die 2. zeile in der datei lesen soll?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

D2006

Administrator

BeitragDi, Jul 20, 2010 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
If String <> "" Then Print "Yihaa!"
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

CO2

ehemals "SirMO"

BeitragDi, Jul 20, 2010 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, thx, manchmal ist die Lösung so einfach
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Jul 20, 2010 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
'Weiß' das Readline in meinem gesendeten Code nun, dass es erst die 2. zeile in der datei lesen soll?
Der "Zeiger" wird in der Datei automatisch weiter geschoben. Um ihn per Hand auf eine andere Position zu stellen kann man Seekfile benutzen.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

PacMani

BeitragDi, Jul 20, 2010 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
BlitzBasic: [AUSKLAPPEN]
If String <> "" Then Print "Yihaa!"


Ist Len() nicht schneller und sollte bevorzugt genutzt werden?
 

Omenaton_2

BeitragMi, Jul 21, 2010 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Pac-Man hat Folgendes geschrieben:
D2006 hat Folgendes geschrieben:
BlitzBasic: [AUSKLAPPEN]
If String <> "" Then Print "Yihaa!"


Ist Len() nicht schneller und sollte bevorzugt genutzt werden?


Ich weiß nicht, welcher Befehl schneller ist, aber falls es überhaupt einen Unterschied geben soll, dann wird dieser wohl verschwindend gering ausfallen.

Ich finde die "If Nichts" Variante wie in dem Beispiel am Besten und verwende es auch selber so, weil es am Logischsten ist.

Die Frage ist ja, "ist etwas da oder nicht" ?
Das kann man am naheliegendsten in Basic übersetzt mit "If String ist Nicht Nichts" beschreiben.

Die Frage nach Länge ist was Anderes, das selbstverständlich indirekt auch eine Antwort darauf gibt, ob da überhaupt was ist, weil Länge Null ist gleich nichts. Aber es ist eben nur indirekt.
Für mich ist diese Sichtweise, möglichst direkt den menschlichen Gedanken in Code umzusetzen wichtig, weil bei großen Projekten jedes Bißchen Plus an Verständlichkeit - oder besser gesagt die Geschwindigkeit, in dem man beim darüberfliegen den Code verstehen kann - vorteilhaft.

Außerdem für Anfänger ist diese direkte Umsetzung einer Fragestellung ganz besonders empfehlenswert.
 

BBPro2

BeitragMi, Jul 21, 2010 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
so schwer ises nun auch nich zu verstehen wenn man len verwendet Rolling Eyes

ich würde die schnellere variante empfehlen und verwenden wobei ich kA
habe welche schneller ist Wink
müsste man halt einfach ma rausfinden, ich muss jetzt aber los . cu Very Happy

Farbfinsternis

BeitragMi, Jul 21, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich in eine Zeile einen TAB haue ist der String nicht leer und es steht dennoch nichts drin. Auf jeden Fall sollte Len() verwendet werden um herauszufinden ob der String etwas lesbares enthält oder leer ist (Len() = 0) oder nur Steuerzeichen enthält (myString = Chr(9)). Wenn man aber unbedingt auf "" testen möchte sollte man das ReadLine() noch in ein Trim fassen...
BlitzBasic: [AUSKLAPPEN]
myString$ = Trim(ReadLine())


Der Code in Deinem Post zeigt auch nicht das Problem, am besten ist es immer zu beschreiben was man exakt machen möchte um eine detaillierte Hilfe zu bekommen.
Farbfinsternis.tv

Silver_Knee

BeitragMi, Jul 21, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
also soweit ich weiß zählt len alle zeichen mit... auch sonderzeichen. genau so ist auch "[Tabulator]"<>""

Farbfinsternis

BeitragMi, Jul 21, 2010 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Silver_Knee hat Folgendes geschrieben:
also soweit ich weiß zählt len alle zeichen mit... auch sonderzeichen. genau so ist auch "[Tabulator]"<>""


Exakt das schrub ich doch gerade ... noch nicht gelobt worden heute?
Farbfinsternis.tv
 

BBPro2

BeitragMi, Jul 21, 2010 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, du "schrubst" genau das gegenteil farbfinsternis Wink

bei dir klingt es so als würde len das problem lösen, dass ein tab nicht als leerer string gesehen wird
ein string der nur aus tab besteht hat jedoch die länge 1, nicht 0
len bringt was das angeht also keinen vorteil (und keinen nachteil... es ändert einfach nichts an dem problem)

Farbfinsternis

BeitragDo, Jul 22, 2010 7:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BBPro2 hat Folgendes geschrieben:
nein, du "schrubst" genau das gegenteil farbfinsternis Wink

bei dir klingt es so als würde len das problem lösen, dass ein tab nicht als leerer string gesehen wird
ein string der nur aus tab besteht hat jedoch die länge 1, nicht 0
len bringt was das angeht also keinen vorteil (und keinen nachteil... es ändert einfach nichts an dem problem)


Nein, genau das habe ich nicht geschrieben. Und Len() löst das Problem dass ein String ,mittel ="" Vergleich nicht als leer angesehen wird.
Code: [AUSKLAPPEN]

myString$ = Chr(9) ; ein TAB im String
If myString = "" ; trifft nicht zu, der String ist nicht leer
If Len(myString) > 0 ; trifft zu, die Länge ist 1


Einfach blos lesen bringt nichts wenn man hinterher das verstehen vergißt.
Farbfinsternis.tv

Holzchopf

Meisterpacker

BeitragDo, Jul 22, 2010 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Bist du ein wenig verwirrt, Farbfinsternis? Ist ja auch ziemlich heiss die Tage Wink

Nichts für ungut, aber:
Code: [AUSKLAPPEN]
If myString = ""

Das prüft, ob ein String gar nix enthält - auch keine Steuerzeichen.
Code: [AUSKLAPPEN]
If Len(myString) > 0

Das prüft, ob ein String irgendwas enthält - egal was.

Du machst also zwei total verschiedene Sachen. Len löst insofern keine Probleme, Trim hingegen schon:
BlitzBasic: [AUSKLAPPEN]
Local myString$ = Chr(9)

; Wir testen den String unbearbeitet mit beiden Methoden
Pruefe(myString)
; Und wir sahen zweimal das selbe Ergebnis

; Um unsichtbare Zeichen zu entfernen, hilft in beiden Fällen Trim()
Pruefe(Trim(myString))
; Und wir sahen wieder zweimal das selbe Ergebnis

WaitKey()

Function Pruefe(myString$)
Print
Print "Geprüft wird der String '"+myString+"'"
; einmal mit der String="" Methode
If myString=""
Print "Der String ist leer (mit "+Chr(34)+Chr(34)+" geprüft)"
Else
Print "Der String ist nicht leer (mit "+Chr(34)+Chr(34)+" geprüft)"
EndIf
; und einmal mit der Len()=0 Methode
If Len(myString)=0
Print "Der String ist leer (mit Len() geprüft)"
Else
Print "Der String ist nicht leer (mit Len() geprüft)"
EndIf
End Function


So. Ich denke, somit wurde alles zum Thema gesagt.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group