Hallo,
um die Daten direkt in eine Datei zu schreiben, müsste die Funktion so geändert werden:
Public Type ArrayWrapper
Arr() As Long
End Type
Public Sub GenerateZahlen(Arrs() As ArrayWrapper, Dateiname As String)
Dim FileNr As Long
FileNr = FreeFile
Open Dateiname For Output As FileNr ' Datei öffnen
Dim i As Long, j As Long
Dim AktAnzahlZahlen As Long
Dim Indizes() As Long, Zahl() As Long
ReDim Indizes(UBound(Arrs))
ReDim Zahl(UBound(Arrs))
Dim ZahlKommtBereitsVorIndex As Long
Do While Indizes(0) <= UBound(Arrs(0).Arr)
ZahlKommtBereitsVorIndex = -1
For i = 0 To UBound(Arrs)
Zahl(i) = Arrs(i).Arr(Indizes(i))
For j = 0 To i - 1
If Zahl(j) = Zahl(i) Then
ZahlKommtBereitsVorIndex = i
Exit For
End If
Next
Next
If ZahlKommtBereitsVorIndex < 0 Then
' Zahl in Datei schreiben
WriteLine FileNr, Zahl
AktAnzahlZahlen = AktAnzahlZahlen + 1
ZahlKommtBereitsVorIndex = UBound(Arrs)
End If
'Weiterschalten
Indizes(ZahlKommtBereitsVorIndex) = Indizes(ZahlKommtBereitsVorIndex) + _
1
For i = ZahlKommtBereitsVorIndex To 1 Step -1
If Indizes(i) > UBound(Arrs(i).Arr) Then
Indizes(i) = 0
Indizes(i - 1) = Indizes(i - 1) + 1
End If
Next
Loop
Close FileNr 'Datei schließen
End Sub
Private Sub WriteLine(FileNr As Long, Zahl() As Long)
Dim i As Long
Dim AusgabeString As String
AusgabeString = ""
Dim IstZahlAufsteigend As Boolean
IstZahlAufsteigend = True
For i = 0 To UBound(Zahl) - 1
If Zahl(i + 1) < Zahl(i) Then IstZahlAufsteigend = False
Next
If IstZahlAufsteigend Then
For i = 0 To UBound(Zahl)
If i > 0 Then AusgabeString = AusgabeString & ","
AusgabeString = AusgabeString & Zahl(i)
Next
Print #FileNr, AusgabeString
End If
End Sub Das Einlesen der zu benutzenden Zahlen sollte normalerweise in ein Array erfolgen, sonst musst du ja, wie du schon schreibst, für jede Zahl eine extra Variable verwenden. Und das Zusammenfügen in den String funktioniert so auch nicht, da du ja den Variablennamen im String hast, anstatt den String erst unter Verwendung der Variablen zusammenzusetzen.
Allerdings wäre es hier einfacher, wenn du beispielsweise die einzelnen, zur Verfügung stehenden Zahlen in eine Datei durch Komma getrennt schreibst, wobei eine Zeile jeweils für eine Zahlengruppe steht. Also dass die Datei z.b. so aussieht:
1,2,3,4,5
2,3,4,5,6
7,8
5,6,7,8,9,10,11,12
10,13,15
20,21,22 Dann könnte man die Datei einfach so einlesen und die Zahlen generieren:
Dim i As Long, j As Long
Dim Dateiinhalt As String
Open "Zahlen.txt" For Binary As 1
Dateiinhalt = Space(LOF(1))
Get 1, , Dateiinhalt
Close 1
Dim ArraysString() As String
ArraysString = Split(Dateiinhalt, vbCrLf)
Dim ArrWrappers() As ArrayWrapper
ReDim ArrWrappers(UBound(ArraysString))
For i = 0 To UBound(ArrWrappers)
Dim Zahlen() As String
Zahlen = Split(ArraysString(i), ",")
ReDim ArrWrappers(i).Arr(UBound(Zahlen))
For j = 0 To UBound(ArrWrappers(i).Arr)
ArrWrappers(i).Arr(j) = CLng(Zahlen(j))
Next
Next
'Zahlen generieren
GenerateZahlen ArrWrappers, "ZahlenErgebnis.txt" Dann werden die erzeugten Zahlen in die Datei "ZahlenErgebnis.txt" gespeichert. |