Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ich eben
Anmeldungsdatum: 05.12.2008 Beiträge: 12 Wohnort: zu Hause
|
Verfasst am: 07.12.2008, 18:03 Titel: Programm Neustart |
|
|
Hallo,
Ich habe mich schon ein bisschen in Q-Basic versucht und ein Programm geschrieben, das Gleichungssysteme löst.
Am Ende einer Rechnung wird gefragt, ob man noch einmal rechnen will.
Das habe ich dann mit dem Befehl RUN gemacht(um das Programm neu zu starten).
Code: |
Again1:
PRINT
PRINT
INPUT "Wollen Sie noch einmal rechnen (J oder N)"; Ans$
IF Ans$ = "J" OR Ans$ = "j" THEN
RUN
END IF
IF Ans$ = "N" OR Ans$ = "n" THEN
END
ELSE
END
END IF |
Jetzt will ich mit FreeBasic eine 32-bit-exe erstellen und bekomme dann folgende Meldung im Ausgabefenster:
Zitat: |
.../QBASIC/FBIde/GLEICHUNG.bas (24) error 1: Argument count mismatch
RUN
^
|
Gibt es da einen anderen Befehl, das Programm Neu zu starten in FB??
Ich freue mich auf eure Beiträge.
MfG ich eben |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 07.12.2008, 18:15 Titel: |
|
|
Hallo,
QBasic ist eine andere Programmiersprache als FreeBASIC und die Programme, die man zur Nutzung dieser Programmiersprachen braucht, sind unterschiedlich. FBIDE (geht aus deiner Fehlermeldung hervor) ist eine Entwicklungsumgebung für FreeBASIC, nicht für QBasic.
Auf GOTO sollte sowohl in QBasic als auch in FreeBASIC verzichtet werden. Besser ist eine Ersatzkonstruktion z.B. mit DO... LOOP:
Code: | DIM n AS STRING, auswahl AS STRING
DO
CLS
INPUT "Gib deinen Namen ein: ", n
PRINT "Hallo, "; n
DO
INPUT "Nochmal (j/n)? ", auswahl
SELECT CASE UCASE(auswahl) 'UCASE(...) wandelt die übergebene Zeichenkette in Großbuchstaben um, sodass es egal ist, ob der User J oder j eingibt
CASE "J": EXIT DO
CASE "N": END
CASE ELSE: PRINT "Ungueltige Eingabe. Nochmal eingeben!"
END SELECT
LOOP
LOOP |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 08.12.2008, 02:26 Titel: |
|
|
Ich habe genau das selbe Problem und will dafür nicht extra nen eigenen Thread öffnen...
Wie kann ich ein FB-Programm dazu bewegen, sich selbst zu beenden und direkt im Anschluss wieder zu starten? (Muss nur für Linux laufen) |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 08.12.2008, 14:04 Titel: |
|
|
Code: | shell "programm&disown": end |
die zweite instanz startet dann allerdings ganz kurz bevor die erste instanz sich beendet. _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 08.12.2008, 14:10 Titel: |
|
|
Wenn sich das Programm aber definitiv beenden soll, bevor es nochmal geöffnet wird, könnte man das über ein zweites Programm machen, das vom ersten gestartet wird, kurz wartet und dann wieder das erste Programm startet. |
|
Nach oben |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 08.12.2008, 17:16 Titel: |
|
|
So einfach isses dann leider doch nich...
ich habe ein Konsolen-Programm, welchem irgendwann im Ablauf gesagt wird, es soll neugestartet werden.
Dieses Programm hat ne Menge Bildschirmausgaben, welche nicht so einfach untertauchen sollten. Das Programm muss auf den Befehl hin beendet werden und erst danach darf es wieder gestartet werden. Allerdings zwingend so, dass wieder Bildschirmausgaben zu sehen sind.
Möglich? |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 08.12.2008, 17:51 Titel: |
|
|
Naja, wenn ein Programm beendet wird, dann geht alles im Speicher mit unter. Mir würde da nichts einfallen, außer den Bildschirminhalt irgendwo zwischenzuspeichern. |
|
Nach oben |
|
 |
frebas
Anmeldungsdatum: 20.06.2008 Beiträge: 245
|
Verfasst am: 08.12.2008, 19:39 Titel: |
|
|
Du könntest die Werte in einer Datei speichern. Aber wenn du alle speicherst macht das neustarten keinen sinn. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 08.12.2008, 22:36 Titel: |
|
|
Dann würd ich mit SCREEN den Bildschirminhalt auslesen, irgendwo nach /tmp zwischenspeichern und beim Neustarten einfach 'nen Switch mit übergeben, der dem Programm sagt, dass es doch bitte mal den Bildschirminhalt aus der Datei übernehmen soll. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 09.12.2008, 02:06 Titel: |
|
|
Hm, ich hab mich undeutlich ausgedrückt...
Ich meinte, die Ausgaben des neugestarteten Programmes sollten nicht im Hintergrund verschwinden. Das Programm läuft rund um die Uhr und muss nur bei eventuellen Änderungen neu gestartet werden. Wenn ich per "shell" ein Programm starte, landet es im Hintergrund -> ich hab keine Ausgaben mehr. Die Ausgaben vom ersten Programm sind mir egal. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.12.2008, 13:21 Titel: |
|
|
Was änderst du denn zur laufzeit? Wenn es nicht direkt die ausführbare Datei ist, dann versuchs mal auf diese Weise:
Code: |
dim beenden as string
do
scope
dim text as string
text = "Hallo Welt!"
print text
end scope
input "Beenden?" , beenden
loop until beenden = "j"
|
Das soll nur ein beispiel sein, wie man sein Programm gestalten kann, dass es von sich aus im prinzip "komplett" neustarten kann. Alles was im "scope-bereich" geschieht, bleibt auch im scope-bereich
Wenn du allerdings das Programm an-sich austauschen möchtest, dann empfehle ich dir ein script um das Programm drum rum zu stricken! Unter linux ist das einfach mit einem bash-script. Unter windows nicht so schick per batch-datei. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.12.2008, 14:02 Titel: |
|
|
Hi,
einfach RUN "Programmname":
Code: | Screen 18
Dim a As Integer
Print " da bin ich..."
Input "0 = Ende, sonst Neustart";a
If a<>0 Then
Dim s As String = __FILE__
Mid( s,Len(s)-2,3) = "exe"
Print "Starte neu.."
Sleep 1000,1
Run s
End If
Print "Ende..."
Sleep 1000,1
End | "Screen 18" habe ich nur testweise angegeben, kann bei Konsolemodus natürlich entfallen. Code: | Dim s As String = __FILE__
Mid( s,Len(s)-2,3) = "exe" | ist nur die automatische Namenswandlung "Test.bas" => "Test.exe"
EDIT/
Austausch des Programms wird so nicht möglich sein, das würde einen kurzen Zeitraum erfordern in dem das Programm nicht benutzt wird (Windows meckert sonst).
Dazu müsste man ein weiteres Programm aufrufen, welches den Austausch macht und dann das Programm wieder aufruft. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 09.12.2008, 14:22, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 09.12.2008, 14:03 Titel: |
|
|
Das Programm muss nur neugestartet werden, wenn der Kern an sich verändert wurde. Sprich, das Programm an sich wird ausgetauscht.
Batch-Script klingt ganz gut, leider bin ich Neuling im Bereich der batch-Programmierung.
Ich habe die Möglichkeit, das Programm mit einem anderen Error-level zu beenden, eventuell hilft das? |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.12.2008, 14:17 Titel: |
|
|
Mit Error-level hab ich so meine schwierigkeiten. Aus dem Stehgreif weiss ich nie welcher level zu welchem ergebnis führt.
Generell würden dauerschleifen z.B. unter windows/dos etwa so ausschauen:
[start.bat]
Code: |
@echo off
:anfang
program.exe
goto anfang
|
unter linux:
[start.sh]
Code: |
#!/bin/bash
while [ "A" = "A" ]; do
./program
done
|
wobei im linux-beispiel die bedingung der while schleife "A" = "A" natürlich an die eigenen bedürfnisse angepasst werden sollte. Hab sie einfach nur als platzhalter reingeschrieben.
Bei beiden beispielen sollte die ausführbare datei im selben verzeichnis stehen wie die script-datei. |
|
Nach oben |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 09.12.2008, 16:08 Titel: |
|
|
Das mit dem Script ist akzeptabel.
Nur wäre das klasse, wenn das Script nur bei bestimmten Bedingungen neustarten würde, nämlich dann, wenn ich den Neustart angefordert habe.
Wenn ich in dem Script irgendwie den Errorlevel abfragen könnte, müsste das lösbar sein. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.12.2008, 17:00 Titel: |
|
|
Wie das mit den error-level unter win/dos funktioniert kann ich dir auf anhieb nicht genau sagen. Ich könnt mir denken das es ähnlich ist wie unter linux:
[start.sh]
Code: |
#!/bin/bash
while ./program ; do
done
|
Dabei läuft die schleife solange wie das programm ohne fehler beendet wurde. Zumindest so ähnlich sollte es ausschauen, hab leider grad keinen linux-rechner zum testen da.
Ich denke da musst du dich einfach mal in batch / bash reinlesen. |
|
Nach oben |
|
 |
max06

Anmeldungsdatum: 05.12.2004 Beiträge: 390 Wohnort: Augsburg
|
Verfasst am: 09.12.2008, 18:03 Titel: |
|
|
Das ganze muss nur unter Linux laufen.
jo, werde mich mal mit der shell-programmierung auseinander setzen...  |
|
Nach oben |
|
 |
|