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:

Rückgabe von Werten(String, Zahl) aus SUB

 
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
kladnica



Anmeldungsdatum: 09.06.2015
Beiträge: 2
Wohnort: Viersen

BeitragVerfasst am: 24.03.2016, 21:06    Titel: Rückgabe von Werten(String, Zahl) aus SUB Antworten mit Zitat

Hallo, bin Anfänger und habe das Problem das eine aus dem Unterprogramm geladene Textdatei (Arrays) nicht im Hauptprogramm verfügbar sind traurig

Code:
Dim Na(1 To 10) As String
Dim da(1 To 10) As String
Dim a As Integer
Dim za As Integer
Dim i As Integer

Declare Sub DateiSpeichern (Na() As String, da() As String, za As Integer)
Declare Sub DateiLaden (Na() As String, da() As String, za As Integer)

Locate 1,1
Print "Name"
Locate 1,10
Print "Geburtstag"

start:

Locate 25,1
Input "1 - Eingabe, 2 - Laden, 3 - Speicher 4 - Ende :", a

Locate 25,48
Print "?"

SELECT CASE a
   CASE 1
      'Eingabe
      za=za+1
      Locate 20,1
      Print "Name:       "
      Print "Geburtstag: "
      
      Locate 20,15
      Print "                    "
      Locate 21,15
      Print "                    "
      Locate 20,15
      Input Na(za)
      Locate 21,15
      Input da(za)
            
      Locate za+1,1
      Print Na(za)
      Locate za+1,10
      Print da(za)
      
      
   CASE 2
   ' Datei Laden      
   DateiLaden (Na(), da(), za)
   
   'Ausgabe
      For i=1 To za
         Locate 1+i,1
         Print Na(i)
         Locate 1+i,10
         Print da(i)
      Next i
      
   CASE 3
      'Datei Speichern
      DateiSpeichern (Na(), da(), za)
   CASE 4
      End
End Select
GoTo start

Sub DateiSpeichern (Na() As String, da() As String, za As Integer)
   Dim i As Integer
   Open "gtag.txt" For output As #1
         Print #1, za
      For i=1 To za
         Print #1, Na(i)
         Print #1, da(i)
      Next i
   Close #1   
End Sub

Sub DateiLaden (Na() As String, da() As String, za As Integer)
   Dim i As Integer
      Open "gtag.txt" For Input As #1
         Input #1, za
      For i=1 To za
         Input #1, Na(i)
         Input #1, da(i)
      Next i
   Close #1
End Sub

_________________
Grüße
Werner Wagner


Zuletzt bearbeitet von kladnica am 25.03.2016, 10:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 24.03.2016, 21:39    Titel: Re: Rückgabe von Werten(String, Zahl) aus SUB Antworten mit Zitat

kladnica hat Folgendes geschrieben:
Hallo, bin Anfänger und habe das Problem das eine aus dem Unterprogramm geladene Textdatei (Arrays) nicht im Hauptprogramm verfügbar sind

Hallo und willkommen hier im Forum.

Dein Problem ist nicht, dass die Array-Werte nicht ins Hauptprogramm übernommen werden - denn das werden sie - sondern dass die Variable "za" nicht ins Hauptprogramm übernommen wird.

Damit das passiert musst du den Wert "ByRef" (als Referenz) anstatt "ByVal" (als Wert) ans Unterprogramm übergeben.

Code:
Declare Sub DateiLaden (Na() As String, da() As String, BYREF za As Integer)

Sub DateiLaden (Na() As String, da() As String, BYREF za As Integer)
[...]
End Sub


Übrigens bitte zukünftig Code-Tags verwenden, wenn du Code hier im Forum einfügst - das verbessert die Lesbarkeit.

Anstatt Goto verwendest du übrigens besser eine Do .. Loop Schleife. Und mit Einrückungen wäre dein Code ein wenig besser lesbar.

Die fixen Textplatzierungen (Locate ...) verursachen großteils unleserliches. Entweder du löscht die Anzeige (clsb bzw. überschreiben mit leerzeichen) oder verzichtest darauf mit Locate den cursor herumspringen zu lassen, was meiner Meinung nach auch gar nicht nötig wäre.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kladnica



Anmeldungsdatum: 09.06.2015
Beiträge: 2
Wohnort: Viersen

BeitragVerfasst am: 24.03.2016, 22:46    Titel: Es funktioniert! Antworten mit Zitat

Hallo und Danke für die schnelle Hilfe und die Tipps,
das einfügen von „BYREF“ habe ich sofort ausprobiert und kann jetzt beruhig schlafen gehen. Die anderen Tipps werde ich mir in den nächsten Tagen zu Gemüte führen und versuchen sie umzusetzen.
_________________
Grüße
Werner Wagner
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



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

BeitragVerfasst am: 25.03.2016, 00:39    Titel: Antworten mit Zitat

Als Randbemerkung.

Array's in der Parameterliste einer Sub / Funktion werden grundsätzlich als ByRef übergeben. Daher kommt es auch zu einem Fehler, wenn man ByRef bei Array's anwenden will.

Code:

Sub bla(ByRef Foobar() as Integer)
'Funktioniert nicht


Sub bla(Foobar() as Integer)
'Funktioniert



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
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
Seite 1 von 1

 
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