Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Der PRINT-Befehl funktioniert nicht
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 29.07.2022, 16:10    Titel: Der PRINT-Befehl funktioniert nicht Antworten mit Zitat

Ich bin ratlos! Etwas was ich schon oft beim Testen verwendet habe funktioniert nicht mehr:
Um festzustellen welche Werte an einer bestimmten Stelle des Programmes 3 Variable haben, habe ich den folgenden Befehl eingefügt:
Code:

PRINT iSatznr,"XXX ",sWer1, sWer2, sWer5: getkey

Der Programmablauf trifft auf diesen Befehl und führt ihn auch tlw. durch. D.h. die Satznummer wird in der Console gedruckt aber de Rest des Befehls nicht. Als Ergebnis wird immer nur die Satznummer gedruckt und danach GETKEY ausgeführt.
Ich verstehe nicht was hier los ist! Ich habe in diesem Programm das PRINT auch schon an anderen Stellen ausprobiert - mit dem gleichen Ergebnis!

EDIT: das Problem hängt scheinbar mit dem doppelten Hochkomma bei "XXX " zusammen.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 29.07.2022, 18:18    Titel: Antworten mit Zitat

Um es einzuschränken, versuch mal ...

Code:
PRINT iSatznr,"XXX ",">" & Str(sWer1) & "<", ">" & Str(sWer2) & "<", ">" & Str(sWer5) & "<": getkey


oder

Code:
PRINT iSatznr,"XXX ",Str(Len(sWer1)), Str(Len(sWer2)), Str(Len(sWer5)): getkey




vieleicht druckt er ja etwas, aber du siehst es nicht, bzw. ist leer zwinkern


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 29.07.2022, 19:07    Titel: Antworten mit Zitat

Danke für die Antwort!
1) es ist richtig, dass die Variablen leer sind (das wollte ich testen) den das ist ein Fehler
2) sobald "XXX " oder ">" zu printen ist spinnt der Befehl, z.B.
bei deinem ersten Vorschlag wird folgendes gedruckt:
1..........................><................><................><
(die Punkte sind durch Blank zu ersetzen) es fehlt also der Beginn der Zeile ab "XXX ", am Ende wurde ein < angefügt und zwischen <> wurde das Komma nicht berücksichtigt..
Ok, die Variablen sind (fälschlicherweise) leer aber trotzdem entspricht die gedruckte Zeile nicht dem Printbefehl (ich habe sie zeichengenau übernommen)
Bei deinem zweiten Vorschlag wird nur die Satznummer gedruckt!

Ich habe dann noch eine Variante eingefügt und zwar:
Code:
PRINT iSatznr;"XXX ";"_";11;"_";22;"_";33;"_";44: getkey

Dieser Befehl wid so gedruckt:
1 11 22 33 44
also auch falsch. Es hängt offenbar mit den Texten zwischen den " zusammen.
Ich habe aber auch Programme die Listen in der Console drucken und bei denen funktioniert es einwandfrei!
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 29.07.2022, 19:14    Titel: Antworten mit Zitat

versuch mal ...

Code:
dim TFN as integer = freefile()
open cons for output as #TFN

PRINT #TFN, iSatznr,"XXX ",sWer1, sWer2, sWer5: getkey




MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 30.07.2022, 07:50    Titel: Antworten mit Zitat

das ergibt keine Änderung. Ich habe, damit man die Vaiablen sWer1, sWer2 und sWer5 im Ausdruck sieht sie auf "11", "22" und "55" gesetzt. Das Ergebnis sieht so aus (Punkte durch Blank ersetzen):
1...........................11............22............55
Dein erster Vorschlag von davor (">") sieht jetzt so aus:
1...........................>11<.......>22<.......>55<

Es ist eindeutig so, dass alle Texte zwischen 2 " (z.B. "XXX ") werden nicht gedruckt. Ausnahme sind, seltsamerweise die Zeichen > und <. Aber auch das stimmt nur für deinen Vorschlag. Ich hab in meinem vorigen Beispiel "_" durch ">" und "<" ersetzt. Das wird hier auch nicht gedruckt. Auch wenn ich in meinen Beipiel (wie in deinem) die Zeichen ; durch Komma ersetze werden die <> nicht gedruckt.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 30.07.2022, 09:54    Titel: Antworten mit Zitat

Achtung: dieses Problem gibt es in diesem Programm NICHT nur beim Print-Befehl sondern auch in Stringoperationen:
Code:
   sWer1 = RIGHT("    " & STR(iWer1),5)
   sWer2 = RIGHT("  " & STR(iWer2),3)   
   sWer5 = RIGHT("00" & STR(iWer5),3)

statt (Punkte wieder durch Blank ersetzen)
....4
..1
002
enthalten die Variablen nur
4
1
2
die Ausdrücke zwischen den Hochkommas werden negiert (genau wie bei Print)

EDIT: noch ein interessantes Detail:
Dieses Programm besteht logisch aus 2 Teilen. Im ersten Teil werden Daten aus der Mitgliederdatei (Vereinssoftware) gelesen und verändert/kombiniert in ein parallele Datei mit Zusatzinformationen zur Mitgliederdatei versehen.
Im 2.Teil werden Daten aus einer anderen Datei selektiert, verknüpft, sortiert und das Ergebnis in die parallele Datei als Zusätze gespeichert.
Ich habe nun im ersten Programmteil ein PRINT für eine Variable eingebaut
Code:
PRINT "XXX ";sFkt: getkey

Dieses Print wird völlig richtig ausgeführt!!!
Ich werde jetzt versuchen herauszufinden ab welchem Statement die Verarbeitung von Text in Hochkommas nicht mehr funktioniert.

EDIT2: ich habe den obigen Printbefehl so geändert, dass zu Beginn die Satznummer gezeigt wird. Das Print wurde bis zum Satz 1683 richtig ausgeführt. Ab Satz 1684 wird "XXX " nicht mehr gedruckt.
Nachdem die Mitgliederdatei als Auszug aus einer CSV-Datei erstellt wurde konnte ich mir die Daten des Satzes 1684 in der entsprechenden Exceltabelle ansehen. Ich konnte dabei aber nichts finden was zu dieser Änderung der Anzeige führen könnte, es gibt keinerlei Abnormitäten).
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 30.07.2022, 10:55    Titel: Antworten mit Zitat

Kann es sein, dass schon vorher im Programm irgendwas die Konsolenausgabe kaputtmacht? Ein ganz simples zweizeiliges
Code:
dim as integer iSatznr = 99
PRINT iSatznr;"XXX ";"_";11;"_";22;"_";33;"_";44: getkey

funktioniert bei mir so, wie es soll.
Die Konsolenausgabe hat bei mir gelegentlich zu spinnen begonnen, wenn ich im Programm fehlerhafte Speicherzugriffe getätigt habe (was mir natürlich nahezu nie passiert durchgeknallt ). In solchen Fällen kann es tatsächlich zu sehr verwirrenden Fehlern an unerwarteten Stellen kommen. Und in besonders schlimmen Fällen halten die sich auch über das Programmende hinaus.

Kompiliere das Programm mal mit der Compileroption -exx und schau, ob da bei der Ausführung was Aufschlussreiches angezeigt wird.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 30.07.2022, 12:10    Titel: Antworten mit Zitat

Leider nein, jetzt stürzt das Programm bei Satz 766 komplett ab und schließt die Konsole. Es gibt keine Meldung oder sonst etwas.
Bei der Compilierung mit -S console (Standard) läuft das Programm zwar durch aber zeigt die Texte (z.B. "XXX ") ab Satz 1684 nicht mehr.
Wie du geschrieben hast könnte da ein Zugriffsfehler vorlegen - entweder schon bei Satz 766 oder bei Satz 1684.
Zugriffsfehler würde heißen, dass die Datei dort einen Fehler hat. Ich werde sie neu aus der CSV erstellen
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 30.07.2022, 12:16    Titel: Antworten mit Zitat

kilix hat Folgendes geschrieben:
Leider nein, jetzt stürzt das Programm bei Satz 766 komplett ab und schließt die Konsole.

Du kannst das Programm auch direkt von einem Konsolenfenster aus starten (oder, wie es unter Windows heißt: Eingabeaufforderung); dann bleibt das Fenster zumindest offen. Ob die Rückmeldung aber weiterhilft oder einfach nur einen Speicherzugriffsfehler ohne Zeilennummer moniert, bleibt abzuwarten.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 30.07.2022, 12:53    Titel: Antworten mit Zitat

Ja, da kam eine Meldung:
Aborting due to runtime error 1 (illegal function call) at line 140 of F:\SVS\Programtst\sippadmin.bi::SINX()
in sippadmin.bi steht auf Zeile 140 der folgenden Befehl
Code:
OPEN "\SVS\Dateien\SYSTEM.DAT" For BinARY ACCESS READ WRITE SHARED AS #fi

Die Funktion SINX() wird in dieser Schleife für alle Sätze aufgerufen. Die Datei die hier geöffnet wird enthält zentrale Parameter, die ich in mehreren Programmen benötige. Nachdem dieser Befehl offenbar bei 765 Datensätzen kein Problem machte und der Funktionsaufruf in allen Datensätzen ident ist bin ich etwas ratlos.
Das Öffnen und CLOSE der Datei SYSTEM.DAT sollte ich wohl besser aus der Funktion entfernen und in die Anwendungsprogramme legen damit es nicht bei jedem Funktionsaufruf gemacht werden muss. Das könnte sicher auch dieses Problem lösen.
Ich vermute, dass der Fehler, der im Satz 1684 (siehe oben) auftritt seine Ursache auch hier hat.

EDIT: ich habe die Mitgliederdatei aus der CSV neu erstellt aber das Problem bei Satznummer 766 bleibt bestehen
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 30.07.2022, 15:25    Titel: Antworten mit Zitat

Für diesen Fall konnte ich das Problem lösen auch wenn ich die Ursache nicht genau feststellen konnte.
Der Aufruf der Funktion SINX() war in diesem Fall an einer schlechten Stelle denn die Funktion wurde in der Schleife für jedes Mitglied aufgerufen. Das war insofern nicht gut weil sich der aus der Funktion erhaltene Wert über den Programmablauf nicht ändert und für alle Mitglieder gleich ist. Ich habe diesen Aufruf jetzt an den Beginn des Programmes gestellt und Frage in der Schleife nur noch die erhaltene Variable ab.
Damit läuft nicht nur das Programm etwas schneller sondern die Absturz- bzw. Fehlerursache wurde beseitigt.

Diese Lösung ist zwar bedriedigend weil sie sachlich besser ist als die alte aber über die Ursache des Problems kann ich nur spekulieren: wahrscheinlich lag sie in dem häufigen, sehr kurz aufeinanderfolgenden Öffnen und Schließen der Datei in der Funktion SINX().
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 30.07.2022, 19:52    Titel: Antworten mit Zitat

Das schnelle Öffnen und Schließen von Dateien verursacht keinen solchen Fehler, dafür sorgt schon das Betriebssystem.

Für mich sieht das eher nach einem Fehler in der Datei aus, der entweder beim Konvertieren entsteht oder schon in der Quelldatei vorhanden ist. Dadurch, daß du SINX() nur einmal aufrufst, kaschierst du diesen Fehler nur, er ist nach wie vor vorhanden und kann dir zu einem späteren Zeitpunkt noch viel *Freude* bereiten.

Vielleicht solltest du die Datei(en) einmal in einen Hex-Editor laden, die entsprechende Stelle (Satz 766) suchen und die Daten dort einmal genau ansehen.

Übrigens muß die vom Compiler angegebene Zeile 140 nicht notwendigerweise mit der Zeile 140 deines Editors übereinstimmen. In der von dir angegebenen Codezeile wird nämlich keine Funktion aufgerufen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 30.07.2022, 21:04    Titel: Antworten mit Zitat

Auf die Vermutung, dass schnelles Öffnen und Schließen einen Fehler erzeugen könnte kam ich weil ich einmal irgendwo gelesen hatte, dass man manchmal besser ein kurzes SLEEP einbaut, um keine Probleme zu bekommen, Details dazu weiß ich nicht. Wie gesagt war eine Vermutung.

Dass der Fehler nicht behoben ist ist mir klar nur weiß ich nicht wie ich ihn erkennen soll und ein HEX-Editor wird mir da auch nich helfen weil ich den Fehler sicher nicht erkennen werden weil ich mit HEX nicht vertraut bin.

Ich bin mir recht sicher, dass der Fehler schon in der CSV-Datei ist da er auch vorhanden ist wenn ich die Mitgliederdatei lösche und neu aufbaue.
Das ergibt dann auch noch ein anderes Problem: die Daten im Vorsystem ändern sich laufend. D.h., dass ich die Aktualisierungen zumindest monatlich machen muss. Es hilft mir also wenig wenn ich den Fehler in der aktuellen Mitgliederdatei finde wenn er nach einer Aktualisierung an einer anderen Stelle ist (bei der Aktualisiierung lösche ich die alte Datei und erstelle eine neue). Ich werde also bis auf weiteres mit diesem Fehler leben müssen und schauen was da noch passiert. Bis jetzt habe ich diesen Satz auch schon in anderen Programmen gelesen ohne, dass ein Fehler auftrat. Der Fehler hat also offenbar mit der Funktion SINX() zu tun die ich in den anderen Programmen für diesen Satz nicht brauchte.

Was den Punkt betrifft, dass der Absturz gar nicht in der gemeldeten Zeile 140 die der Compiler meldet ist bin ich ratlos denn in der Funktion SINX() gibt es keinen Funktionsaufruf.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 31.07.2022, 04:38    Titel: Antworten mit Zitat

Das einzigste was mir jetzt noch sinnig einfällt wäre, das du das gesamte Programm einmal zur Verfügung stellst, samt einer test-datei, welche eingelesen wird und diesen Fehler erzeugt.

Dann könnte man sich das mal genau ansehen.

Du kannst das program auch sehr weiter reduzieren, und dinge weg lassen, welche für die Fehlererzeugung unwichtig sind.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 31.07.2022, 08:53    Titel: Antworten mit Zitat

Das kann ich leider nicht machen weil es sich im Echtdaten handelt die der Geheimhaltung unterliegen. Schade aber nicht zu ändern.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 31.07.2022, 11:39    Titel: Antworten mit Zitat

Eine Idee wäre, das Programm soweit wie möglich zu reduzieren, sodass der Fehler immer noch auftaucht, und dann einen fiktiven, ebenso großen Datensatz zu probieren, um zu testen, ob es wirklich an den Daten oder an etwas anderem liegt. Wenn es auch mit den fiktiven Daten zu einem Fehler kommt, könntest du es in dieser Form einstellen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 31.07.2022, 13:15    Titel: Antworten mit Zitat

Das kann ich mir ansehen! Wird aber erst in einer Woche sein weil ich wegfahre und vorher zu wenig Zeit habe.
_________________
Grüße
kilix
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 02.08.2022, 01:55    Titel: Antworten mit Zitat

kilix hat Folgendes geschrieben:
Das kann ich leider nicht machen weil es sich im Echtdaten handelt die der Geheimhaltung unterliegen. Schade aber nicht zu ändern.


Daher auch >Test-Datei< zwinkern


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 02.08.2022, 10:25    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:
kilix hat Folgendes geschrieben:
Das kann ich leider nicht machen weil es sich im Echtdaten handelt die der Geheimhaltung unterliegen. Schade aber nicht zu ändern.


Daher auch >Test-Datei< zwinkern


MfG
TPM


Ich fürchte nur, daß so eine Testdatei wenig hilfreich ist, sie müsste nämlich den gleichen Fehler enthalten wie die Originaldatei, was mehr als unwahrscheinlich ist (und um den Fehler absichtlich einzubauen, müsste man ihn erst einmal kennen, und dann wäre die Testdatei überflüssig durchgeknallt ).

Es muß übrigens nicht unbedingt ein Fehler in der Datei sein, es könnte sich auch um eine besondere Konstellation handeln, die vom Konvertierungsprogramm nicht korrekt verarbeitet wird. Aber auch dafür gilt das oben gesagte.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 02.08.2022, 17:15    Titel: Antworten mit Zitat

Die Testdatei könnte zumindest mal einen Hinweis darauf geben, ob der Fehler wirklich in den Daten oder allgemein im Programm liegt. Wenn es wirklich an den Daten liegen sollte (bei einer CSV-Datei glaube ich da nicht so recht dran - außer vielleicht, eine Zeile enthält eine andere Zahl an Einträgen als die anderen und sorgt dadurch zu einer Verschiebung) wäre der nächste Schritt, zu schauen, was diese Zeile von den davor liegenden unterscheidet.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz