 |
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 |
Powertower
Anmeldungsdatum: 30.03.2011 Beiträge: 8
|
Verfasst am: 30.03.2011, 16:52 Titel: Weitere Nutzungsmöglichkeiten von data o.ä. |
|
|
Hi,
Ich bin recht neu hier ( hab mich durch ein paar Tuts auf der offi Seite gefressen...) und konnte zu folgendem problem nix finden( kein google kein FB o FBForum)
ich habe den Befehl [data] entdeckt.
find ich sehr schön nur ich fänd es noch schöner wenn ich in der Lage wär data IN einem Programm zu verändern/beschreiben/überschreiben.
Was natürlich auch ginge ist ein gleichwertiger Ersatz
Also (ich schreibe manchmal kompliziert):
z.B.
Code: |
Dim as Integer X, n
data 1, 2, 3, 4
for n = 1 to 4
read X
Print X
Sleep 500
next n
|
ja ich spiele gerne rum ( sleep 500 ; read,print usw...)
aber ich hätte gerne die möglichkeit data zu verändern, also in einer schleife z.b.
Code: |
Dim as Integer X = 5
data 1, 2, X, 3, 4 'das geht halt nicht
'oder: (nicht echte FB schreibweise)
SCHREIBE (X) ZU data 'oda so^^
|
dass dann:
Code: |
data 1, 2, 3, 4, X
'praktisch
1, 2, 3, 4, 5
|
ich hoffe ist klar was ich meine und ihr schlagt nicht gleich die hände überm kopf zusammen. (jeder hat mal angefangen )
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 30.03.2011, 18:21 Titel: |
|
|
DATA ist tatsächlich dazu gedacht, Daten statisch in das Programm einzubinden. Wenn du die einzulesenden Daten zuerst noch verändern willst, würde ich da eher über eine externe Datei gehen: Mit OPEN kannst du eine Datei zum Schreiben öffnen und die gewünschten Daten hineinschreiben (anschließend CLOSE nicht vergessen). Mit einem weiteren OPEN kannst du dann die Datei zum Lesen öffnen und die Daten wieder herauslesen.
Ach ja, was noch ginge, wäre der Einsatz des Präprozessors:
Code: | #DEFINE x 5
DATA 1, 2, 3, 4, x
DIM AS INTEGER i, wert
FOR i = 1 TO 5
READ wert
PRINt wert
NEXT |
Ist aber auch statisch, weil der Wert bereits zu Compilierzeit festgesetzt wird. Letztendlich entspricht das #DEFINE einer Substitution von x durch 5. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 30.03.2011, 18:45 Titel: |
|
|
Ich denke fuer diese zwecke waehre ein Array gut geeignet
Code: | Dim Tabelle(1 To 5) As Integer => {1,2,3,4,5}
Tabelle(3) = 7
For i As Integer = 1 To 5
Print Tabelle(i)
Next
sleep |
|
|
Nach oben |
|
 |
Powertower
Anmeldungsdatum: 30.03.2011 Beiträge: 8
|
Verfasst am: 31.03.2011, 20:02 Titel: |
|
|
ok... da kann ich mich mal hinterklemmen (referenz)...
(ich versteh nicht alles direkt) aber ich denke OPEN CLOSE find ich am besten/einfachsten
danke leute!!
fals noch einer was hat:
immer her damit!  |
|
Nach oben |
|
 |
Powertower
Anmeldungsdatum: 30.03.2011 Beiträge: 8
|
Verfasst am: 31.03.2011, 21:21 Titel: |
|
|
ok ich habe es jetzt doch mit (wert TO wert2) geschafft.
wollte eigentlich ein array das sich selbst mit jedem schritt +1 zählt
ich hab:
Code: |
Dim as Integer n, i, i1, Test
Dim as Single y(0 to i)
do
i1 = i
i = i1+1
Input "", y(i)
loop until y(i) = 0
i1 = i
i = i1-1
for n = 1 to i
Print y(i)
i1 = i
i = i1-1
next
sleep
end
|
und das klappt!
danke! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 31.03.2011, 22:02 Titel: |
|
|
An und für sich ist READ und DATA ein Stück weit als Notkrücke zu betrachten, weil traditionelle BASIC-Dialekte (wie in den 80er-Jahren typischerweise üblich) noch keine Konstrukte wie
Code: | Dim Tabelle(1 To 5) As Integer => {1,2,3,4,5} |
(von XOR zuvor gepostet) kennen, um feste Datentabellen (Array-Konstanten) definieren zu können.
Zur Frage, wann besser eine Datei und wann als Konstante: Aus meiner Sicht sollten Konstantenarrays und verwandte Sprachkonstrukte prinzipiell nur für kleinere, wirklich fixe Daten verwendet werden, z.B. die Namen der 7 Wochentage, die Namen der 12 Kalendermonate usw. als typische Beispiele. Sobald es komplexer wird (z.B. ein ganzes Telefonbuch), sind sofort separate Datendateien das Richtige und im Fall von schreibendem Zugriff sogar das einzig Richtige. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 31.03.2011, 22:06 Titel: |
|
|
Habe da ein paar Probleme:
Code: | Dim as Single y(0 to i) |
Da i noch den Wert 0 hat, ist das Array sehr klein. Du schreibst dann in höhere Bereiche hinein, was früher oder später zu Speicherzugriffsfehlern führen wird.
Code: | do
i1 = i
i = i1+1
Input "", y(i)
loop until y(i) = 0 |
Ich sehe da den Sinn mit dem i1 nicht. Ein i = i+1 würde ausreichen.
edit:
Code: | for n = 1 to i
Print y(i)
i1 = i
i = i1-1
next |
würde ich eher im Rückwärtsschritt machen:
Code: | for n = i to 1 step -1
Print y(n)
next |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 31.03.2011, 23:21 Titel: |
|
|
@dreael
wenn man nur schreibenden Zugriff braucht wuerde ich das auch mit open machen. Aber sehr heufig will man dann auch lesen und bei einem Telefonbuch haette ich 100% eine such-function drinnen und da muesste man sich zwischen geschwindigkeit => Allocatetes Array oder langsame => externe datei entscheiden. in der datei ist die hochste suchzeit (denke ich) n(o) bei einem gut aufgebautem array dagegen bloss (glaube) log2(o)+1.
(kann sein das es auch mit externen datein schneller geht, kenne die zugriffszeiten von datein und mit Allocate erzeugten arrays nicht). kommt halt eben auch drauf an ob man es schnell braucht oder speicherplatz sparend.
@Powertower
was nemored da angesprochen hat mit dem
Code: | Dim as Single y(0 to i) |
stimmt natuerlich.
So koennte man es loesen:
mit Arrays:
Code: | Dim Tabelle() As String
Dim i As Integer
Do
i+= 1
ReDim Preserve Tabelle(i) As String
Input "" , Tabelle(i)
Loop Until Tabelle(i) = ""
For i = i To 1 Step -1
Print Tabelle(i)
Next
Sleep |
weiss aber nicht wie gut ReDim Preserve ist.
Datei:
Code: | Dim FF As Integer
Dim Temp As String
FF = FreeFile
Open "List.txt" For Output As #FF
Do
Input "" , Temp
Print #FF, Temp
Loop Until Temp = ""
Close #FF
FF = FreeFile
Open "List.txt" For Input As #FF
Do
Line Input #FF, Temp
Print Temp
Loop Until Eof(FF)
Close #FF
Sleep |
|
|
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.
|
|