 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 29.11.2007, 21:14 Titel: Das erste Wort fehlt (beim Parser) |
|
|
Code: | dim as string Codezeile ="print 'das ist ein test'"
dim as integer leerzeichen
dim as string tmptxt1
dim as string tmptxt2
dim as string tmptext
' Anzahl der Leerzeichen feststellen
for i as integer = 1 to len(codezeile)
if mid(codezeile,i,1)=" " then leerzeichen +=1
next
' Dafür wirds doppelt benötigt (umständlich)
dim as integer leerzeichenpos(leerzeichen)
' Noch mal das gleiche aber jetzt mit speichern der Leerzeichen
leerzeichen = 0
for i as integer = 1 to len(codezeile)
if mid(codezeile,i,1)=" " then leerzeichen +=1:leerzeichenpos(leerzeichen)=i
next
for i as integer = 1 to leerzeichen+1
tmptxt1= mid(codezeile,leerzeichenpos(i)+1,len(codezeile)-leerzeichenpos(i)+1)
if instr(tmptxt1," ") > 0 then
tmptxt2 = left(tmptxt1,instr(tmptxt1," "))
else
tmptxt2 = tmptxt1
end if
print tmptxt2
next
sleep |
normalerweise sollte er doch auch das erste wort anzeigen.. was er natürlich nicht macht
//Edit das kleine Problem konnte ich beheben, aber wenn man sich so die zahlen(beim neuen Code) anguckt, besteht dei gefahr eines Bufferowerflows?
Code: | dim as string Codezeile ="es geht doch *g*"
dim as integer leerzeichen
dim as string tmptxt1
dim as string tmptxt2
' Anzahl der Leerzeichen feststellen
for i as integer = 1 to len(codezeile)
if mid(codezeile,i,1)=" " then leerzeichen +=1
next
' Difinieren
dim as integer leerzeichenpos(leerzeichen)
' Noch mal das gleiche aber jetzt mit speichern der Leerzeichen
leerzeichen = 0
for i as integer = 1 to len(codezeile)
if mid(codezeile,i,1)=" " then leerzeichen +=1:leerzeichenpos(leerzeichen)=i
next
dim as string tmptext
for i as integer = 0 to leerzeichen
tmptxt1= mid(codezeile,leerzeichenpos(i)+1,len(codezeile)-leerzeichenpos(i))
if instr(tmptxt1," ") > 0 then
tmptxt2 = left(tmptxt1,instr(tmptxt1," "))
else
tmptxt2 = tmptxt1
end if
print tmptxt2,leerzeichenpos(i)+1,len(codezeile)-leerzeichenpos(i)
next
sleep |
_________________ Bis irgendwann...  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2007, 00:04 Titel: |
|
|
Code: | ' Dafür wirds doppelt benötigt (umständlich)
DIM AS INTEGER leerzeichenpos(leerzeichen) |
könntest du auch mit einem REDIM probieren. Habe keine Ahnung, wie das von der Performance ist, aber all zu viele Leerzeichen werden für gewöhnlich ja nicht erwartet.
(trotzdem solltest du auch die Möglichkeit mehrerer Leerzeichen hintereinander in Betracht ziehen)
Code: | if mid(codezeile,i,1)=" " |
läuft mit
Code: | if codezeile[i-1] = 32 |
ein wenig schneller.
Ein Overflow könnte ich mir durchaus vorstellen, wenn die eingelesenen Zeile seeeehr lang ist und ein paar Milliarden Leerzeichen enthält. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|