Du bist nicht angemeldet.

Bahaoth

Registrierter Benutzer

  • »Bahaoth« ist der Autor dieses Themas

Beiträge: 75

Dabei seit: 2. Januar 2012

  • Private Nachricht senden

1

Samstag, 28. Januar 2012, 01:01

Fehlerfindung .... erste txt file ist immer leer

Code:

 Hier klicken für weitere Informationen

  1. Visual Basic Quellcode

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    
    Public Class Form1
    
        Dim Neur_Netz(,) As Double
        Dim Anfang(,) As Double
        Dim Lerndat(499, 6) As Integer
        Dim maxDelta As Double
        Dim delta_w, delta_t As Double
        Dim x1, x2, x3, x4 As Integer
        Dim O1, O2, O3, O4 As String
        Dim Art, Netz, pon As String
        Dim Zufall As New Random
    
        Function loadlerndat()
            Dim laenge As Integer
            Dim Pfad As String
    
            If Netz = "Simpel" Then
                laenge = 4
            ElseIf Netz = "2_Eingaenge" Then
                laenge = 2
            ElseIf Netz = "2_Ausgaenge" Then
                laenge = 5
            ElseIf Netz = "2_Ausgaenge_Groß" Then
                laenge = 5
            ElseIf Netz = "3_Ausgaenge" Then
                laenge = 6
            ElseIf Netz = "3_Ausgaenge_Groß" Then
                laenge = 6
            End If
    
            Pfad = "C:\Dokumente und Einstellungen\Chris\Desktop\Netze\Lerndateien\" + Netz + "_" + Art + ".txt"
    
            Dim C() As Char = {" "}
            Dim Inhalt() As String = System.IO.File.ReadAllLines(Pfad)
            Dim Liste As New List(Of String)
    
            For Each Zeile As String In Inhalt
                Liste.AddRange(Zeile.Split(C, StringSplitOptions.RemoveEmptyEntries))
            Next
    
            Dim Array() As String = Liste.ToArray()
            Dim z As Int32 = 0
    
            For i As Int32 = 0 To 499
                For k As Int16 = 0 To laenge
                    Lerndat(i, k) = Convert.ToInt16(Array(z))
                    z = z + 1
                Next k
            Next i
            Return (0)
        End Function
    
        Function netzerstellen()
            If Netz = "Simpel" Then
                x1 = 12
                x2 = 7
                x3 = 0
                x4 = 3
                erstellen(x1, x2, x3, x4)
            ElseIf Netz = "2_Eingaenge" Then
                x1 = 10
                x2 = 7
                x3 = 0
                x4 = 1
                erstellen(x1, x2, x3, x4)
            ElseIf Netz = "2_Ausgaenge" Then
                x1 = 13
                x2 = 7
                x3 = 1
                x4 = 3
                erstellen(x1, x2, x3, x4)
            ElseIf Netz = "2_Ausgaenge_Groß" Then
                x1 = 21
                x2 = 15
                x3 = 1
                x4 = 3
                erstellen(x1, x2, x3, x4)
            ElseIf Netz = "3_Ausgaenge" Then
                x1 = 14
                x2 = 7
                x3 = 2
                x4 = 3
                erstellen(x1, x2, x3, x4)
            ElseIf Netz = "3_Ausgaenge_Groß" Then
                x1 = 22
                x2 = 15
                x3 = 2
                x4 = 3
                erstellen(x1, x2, x3, x4)
            End If
            Return (True)
        End Function
    
        Function erstellen(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer) As Boolean
            'a=y Netz
            'b=x Netz
            'c=Anzahl Ausgänge - 1
            'd=Anzahl Eingänge - 1
            Neur_Netz = New Double(a, b) {}
            Anfang = New Double(a, b) {}
            Dim Neues_Netz(a, b) As Double
            Dim tetah(b) As Double
            Dim tetay(c) As Double
    
            For i As Integer = 0 To a
                For k As Integer = 0 To b
                    If pon = "positiv" Then
                        Randomize()
                        Neues_Netz(i, k) = (Rnd())
                        Neues_Netz(i, k) = Math.Round(Neues_Netz(i, k) * 1000) / 1000
                    Else
                        Neues_Netz(i, k) = Zufall.NextDouble * 2 - 1
                        Neues_Netz(i, k) = Math.Round(Neues_Netz(i, k) * 1000) / 1000
                    End If
                Next k
            Next i
    
            For i As Integer = 0 To d
                For k As Integer = 0 To b
                    tetah(k) = tetah(k) + Math.Round(Neues_Netz(i, k) / 1.5 * 1000) / 1000
                Next
            Next
    
            For i As Integer = (d + 1) To (a - d)
                For k As Integer = 0 To c
                    tetay(k) = tetay(k) + Math.Round(Neues_Netz(i, k) / 1.5 * 1000) / 1000
                Next
            Next
    
            For i As Integer = 0 To a
                For k As Integer = 0 To b
                    Select Case i
                        Case 0 To d
                            If k = b Then
                                RichTextBox1.Text &= Neues_Netz(i, k).ToString & vbCrLf
                            Else
                                RichTextBox1.Text &= Neues_Netz(i, k).ToString & " "
                            End If
                        Case (d + 1) To (a - (c + 1))
                            If k = b Then
                                RichTextBox1.Text &= "0" & vbCrLf
                            ElseIf k > d Then
                                RichTextBox1.Text &= "0" & " "
                            ElseIf k = d Then
                                RichTextBox1.Text &= tetah(i - (d + 1)).ToString & " "
                            Else
                                RichTextBox1.Text &= Neues_Netz(i, k).ToString & " "
                            End If
                        Case Else
                            If k = b Then
                                RichTextBox1.Text &= "0" & vbCrLf
                            ElseIf k = 0 Then
                                RichTextBox1.Text &= tetay(i - (a - c)).ToString & " "
                            Else
                                RichTextBox1.Text &= "0" & " "
                            End If
                    End Select
                Next
            Next
            For i As Integer = 0 To a
                For k As Integer = 0 To b
                    Neur_Netz(i, k) = Neues_Netz(i, k)
                Next
            Next
            Dim Pfad As String
            Pfad = O2 + "\Netz.txt"
            My.Computer.FileSystem.WriteAllText(O4, Pfad + vbCrLf, True)
            RichTextBox1.SaveFile(Pfad, RichTextBoxStreamType.PlainText)
            RichTextBox1.Text = ""
            Return (True)
        End Function
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim schritte As Integer
            schritte = t_schritte.Text
            maxDelta = t_delta.Text
            O1 = "C:\Dokumente und Einstellungen\Chris\Desktop\Netze\" + t_Ordnername.Text
            O4 = O1 + "\Netze.txt"
            Art = ComboBox2.SelectedItem
            Netz = ComboBox1.SelectedItem
            pon = ComboBox3.SelectedItem
            My.Computer.FileSystem.CreateDirectory(O1)
            My.Computer.FileSystem.WriteAllText(O4, "", True)
            'loadlerndat()
            'ex = New Double(schritte, 4) {}
    
            For f As Integer = 0 To schritte
                O2 = O1 + "\" + Netz + "_" + Art + "_" + f.ToString
                O3 = O2 + "\Protokoll"
                My.Computer.FileSystem.CreateDirectory(O2)
                My.Computer.FileSystem.CreateDirectory(O3)
                netzerstellen()
    
                For k As Integer = 0 To (maxDelta * 10)
                    delta_t = 0.1 + 0.1 * k
                    For j As Integer = 0 To (maxDelta * 10)
                        delta_w = 0.1 + 0.1 * j
                        'lernschleife()
                    Next
                Next
    
            Next
    
            'SpeichernEx()
    
        End Sub
    End Class





Das Programm soll txt files in bestimmte ordner schreiben.
Das verrückte ist, dass die erste txt file leer ist die späteren aber beschrieben.
Wenn ich das Programm ein zweites mal ausführe ist auch die erste text datei erstellt.

Die Datei wird unter netzerstellen() erstellt über eine Richtextbox

RodFromGermany

Der Programmator

Beiträge: 5 880

Hilfreich-Bewertungen: 642

  • Private Nachricht senden

2

Samstag, 28. Januar 2012, 12:10

Gib Deinem Programm Option Strict On. Berichtige die Fehler und poste dann wieder.
Und schreib, was so in Deinen Controls steht.
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
VB-Fragen über PN werden ignoriert!

Bahaoth

Registrierter Benutzer

  • »Bahaoth« ist der Autor dieses Themas

Beiträge: 75

Dabei seit: 2. Januar 2012

  • Private Nachricht senden

3

Samstag, 28. Januar 2012, 12:28

Aber wenn ich Option Strict on schreibe,
dann habe ich das problem dass ich aus einer textbox nicht mehr eine Double auslesen kann.
Das brauche ich aber xD

fichz

Powidltatschkerln

  • »fichz« ist männlich

Beiträge: 1 146

Dabei seit: 22. April 2010

Wohnort: Linz

Hilfreich-Bewertungen: 180

  • Private Nachricht senden

4

Samstag, 28. Januar 2012, 12:38

Genau das bewirkt Option Strict On. Das du nicht mit Datentypen tun annst was du willst.
Oft wird neben dem Fehler ein kleines Dreieck mit ner Lösung mitgegeben.

Aber der Grund für den Fehler ist: Textbox.Text ist ein String und kann deswegen nicht so einfach als Double "missbraucht" werden.

Konvertieren ist das Stichwort:

Visual Basic Quellcode

1
2
Dim dblTest as Double = Double.Parse(Textbox.Text)
Dim dblTest as Double = CDbl(Textbox.Text)


Am besten aber noch mit der TryParse Methode:
http://msdn.microsoft.com/de-de/library/…v=vs.80%29.aspx

Hier wird mitgeprüft ob dein String überhaupt in Double konvertiert werden kann (was zB. mit "123b" nicht funktionieren würde und dein programm schmiert ab)

lg
ScheduleLib 0.0.1.0
Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

Es hat bereits 1 registrierter Benutzer diesen Beitrag als hilfreich eingestuft.

Benutzer, die diesen Beitrag hilfreich fanden:

Bahaoth

RodFromGermany

Der Programmator

Beiträge: 5 880

Hilfreich-Bewertungen: 642

  • Private Nachricht senden

5

Samstag, 28. Januar 2012, 13:09

Aber wenn ich Option Strict on schreibe,

dann habe ich das Problem, dass ich nachdenken muss.
Gib allen Deinen Programmen Option Strict On, indem Du dies in Deinem Studio als Default-Eigenschaft aller (neu angelegten) Projekte vorgibst.
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
VB-Fragen über PN werden ignoriert!

Bahaoth

Registrierter Benutzer

  • »Bahaoth« ist der Autor dieses Themas

Beiträge: 75

Dabei seit: 2. Januar 2012

  • Private Nachricht senden

6

Samstag, 28. Januar 2012, 14:02

Okay habe es mal versucht.
Bei Double funktioniert es,


Art = ComboBox2.SelectedItem
Netz = ComboBox1.SelectedItem
pon = ComboBox3.SelectedItem

bei diesen dreien habe ich noch ein Problem

  • »haiyyu« ist männlich

Beiträge: 2 564

Dabei seit: 16. November 2008

Hilfreich-Bewertungen: 376

  • Private Nachricht senden

7

Samstag, 28. Januar 2012, 14:17

SelectedItem.ToString()
Bitte keine Fragen bezüglich im Forum behandleten Themen per PN! Auch Bitten zur Beantwortung eines Themas per privater Nachricht wird nicht nachgekommen.

Bahaoth

Registrierter Benutzer

  • »Bahaoth« ist der Autor dieses Themas

Beiträge: 75

Dabei seit: 2. Januar 2012

  • Private Nachricht senden

8

Samstag, 28. Januar 2012, 14:40

Super danke das funktioniert schon einmal.
Ihr seid klasse.


Jetzt erstmal zum Verständnis wozu das Option Strict on? Was genau bringt mir das?

Hier nun der neue Code:
 Hier klicken für weitere Informationen

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
Option Strict On
Imports System.IO

Public Class Form1

    Dim Neur_Netz(,) As Double
    Dim Anfang(,) As Double
    Dim Lerndat(499, 6) As Integer
    Dim maxDelta As Double
    Dim delta_w, delta_t As Double
    Dim x1, x2, x3, x4 As Integer
    Dim O1, O2, O3, O4 As String
    Dim Art, Netz, pon As String
    Dim Zufall As New Random

    Function netzerstellen() As Boolean
        If Netz = "Simpel" Then
            x1 = 12
            x2 = 7
            x3 = 0
            x4 = 3
            erstellen(x1, x2, x3, x4)
        ElseIf Netz = "2_Eingaenge" Then
            x1 = 10
            x2 = 7
            x3 = 0
            x4 = 1
            erstellen(x1, x2, x3, x4)
        ElseIf Netz = "2_Ausgaenge" Then
            x1 = 13
            x2 = 7
            x3 = 1
            x4 = 3
            erstellen(x1, x2, x3, x4)
        ElseIf Netz = "2_Ausgaenge_Groß" Then
            x1 = 21
            x2 = 15
            x3 = 1
            x4 = 3
            erstellen(x1, x2, x3, x4)
        ElseIf Netz = "3_Ausgaenge" Then
            x1 = 14
            x2 = 7
            x3 = 2
            x4 = 3
            erstellen(x1, x2, x3, x4)
        ElseIf Netz = "3_Ausgaenge_Groß" Then
            x1 = 22
            x2 = 15
            x3 = 2
            x4 = 3
            erstellen(x1, x2, x3, x4)
        End If
        Return (True)
    End Function

    Function erstellen(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer) As Boolean
        'a=y Netz
        'b=x Netz
        'c=Anzahl Ausgänge - 1
        'd=Anzahl Eingänge - 1
        Neur_Netz = New Double(a, b) {}
        Anfang = New Double(a, b) {}
        Dim Neues_Netz(a, b) As Double
        Dim tetah(b) As Double
        Dim tetay(c) As Double

        For i As Integer = 0 To a
            For k As Integer = 0 To b
                If pon = "positiv" Then
                    Randomize()
                    Neues_Netz(i, k) = (Rnd())
                    Neues_Netz(i, k) = Math.Round(Neues_Netz(i, k) * 1000) / 1000
                Else
                    Neues_Netz(i, k) = Zufall.NextDouble * 2 - 1
                    Neues_Netz(i, k) = Math.Round(Neues_Netz(i, k) * 1000) / 1000
                End If
            Next k
        Next i

        For i As Integer = 0 To d
            For k As Integer = 0 To b
                tetah(k) = tetah(k) + Math.Round(Neues_Netz(i, k) / 1.5 * 1000) / 1000
            Next
        Next

        For i As Integer = (d + 1) To (a - d)
            For k As Integer = 0 To c
                tetay(k) = tetay(k) + Math.Round(Neues_Netz(i, k) / 1.5 * 1000) / 1000
            Next
        Next

        For i As Integer = 0 To a
            For k As Integer = 0 To b
                Select Case i
                    Case 0 To d
                        If k = b Then
                            RichTextBox1.Text &= Neues_Netz(i, k).ToString & vbCrLf
                        Else
                            RichTextBox1.Text &= Neues_Netz(i, k).ToString & " "
                        End If
                    Case (d + 1) To (a - (c + 1))
                        If k = b Then
                            RichTextBox1.Text &= "0" & vbCrLf
                        ElseIf k > d Then
                            RichTextBox1.Text &= "0" & " "
                        ElseIf k = d Then
                            RichTextBox1.Text &= tetah(i - (d + 1)).ToString & " "
                        Else
                            RichTextBox1.Text &= Neues_Netz(i, k).ToString & " "
                        End If
                    Case Else
                        If k = b Then
                            RichTextBox1.Text &= "0" & vbCrLf
                        ElseIf k = 0 Then
                            RichTextBox1.Text &= tetay(i - (a - c)).ToString & " "
                        Else
                            RichTextBox1.Text &= "0" & " "
                        End If
                End Select
            Next
        Next
        For i As Integer = 0 To a
            For k As Integer = 0 To b
                Neur_Netz(i, k) = Neues_Netz(i, k)
            Next
        Next
        Dim Pfad As String
        Pfad = O2 + "\Netz.txt"
        My.Computer.FileSystem.WriteAllText(O4, Pfad + vbCrLf, True)
        RichTextBox1.SaveFile(Pfad, RichTextBoxStreamType.PlainText)
        RichTextBox1.Text = ""
        Return (True)
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim schritte As Integer
        Dim result, result2 As Boolean

        result = Integer.TryParse(t_schritte.Text, schritte)
        result2 = Double.TryParse(t_delta.Text, maxDelta)
        Art = ComboBox2.SelectedItem.ToString()
        Netz = ComboBox1.SelectedItem.ToString()
        pon = ComboBox3.SelectedItem.ToString()

        O1 = "C:\Dokumente und Einstellungen\Chris\Desktop\Netze\" + t_Ordnername.Text
        O4 = O1 + "\Netze.txt"

        My.Computer.FileSystem.CreateDirectory(O1)
        My.Computer.FileSystem.WriteAllText(O4, "", True)

        For f As Integer = 0 To schritte
            ProgressBar1.Maximum = schritte
            ProgressBar1.Minimum = 0
            ProgressBar1.Value = f
            Application.DoEvents()

            O2 = O1 + "\" + Netz + "_" + Art + "_" + f.ToString
            O3 = O2 + "\Protokoll"
            My.Computer.FileSystem.CreateDirectory(O2)
            My.Computer.FileSystem.CreateDirectory(O3)
            netzerstellen()

        Next
    End Sub

End Class




So was das Programm nun machen SOLL.

Es erstellt als erstes eine Ordnerstruktur

Als Erstes der Hauptordner O1
Dann bei jeder Schleife einen Ordner O2 in O1 hinein und in O2 einen O3
O3 ist der Protokollordner in dem Die Protokolle abgespeichert werden sollen.

Und in jeder schleife erstellt er einen neuen O2 und einen neuen O3.

Das klappt auch soweit, auch die Namensgebung ist richtig.


Nun zu meinem Problem:
Er soll bei jeder Schleife auch ein Netz erstellen, dieses Netz ist Abhängig von der Auswahl in der Combobox1 und der Combobox3.

Combobox 1 Wählt aus 6 Möglichen Strings einen aus, dementsprechend werden die Werte x1 bis x4 deklariert. Diese müssen Global sein, da ich sie später auch in anderen Funktionen brauche und werden für den Programmdurchlauf nicht mehr verändert.

Combobox 2 wählt aus aus negativ und positiv.
Das entscheidet dann später ob die Zufallszahlen zwischen -1 und 1 oder 0 und 1 liegen.

Mein Problem ist nun, dass beim Speichern der Netze, beim ersten durchlauf die .txt file leer bleibt.
Erst im zweiten durchlauf der Schleife steht etwas in der txt file.

Wenn ich das Programm ohne es zu schließen nochmal durchführe steht auch in er ersten txt file etwas drin.

Woran kann das liegen?

Samus Aran

Registrierter Benutzer

  • »Samus Aran« ist männlich

Beiträge: 2 630

Dabei seit: 12. November 2009

Hilfreich-Bewertungen: 612

  • Private Nachricht senden

9

Samstag, 28. Januar 2012, 14:42

Option Strict On erzwingt sauberes Umgehen mit Datentypen.

Bahaoth

Registrierter Benutzer

  • »Bahaoth« ist der Autor dieses Themas

Beiträge: 75

Dabei seit: 2. Januar 2012

  • Private Nachricht senden

10

Samstag, 28. Januar 2012, 14:47

Also kann ich nicht mit Datentypen wilt rumjonglieren und so Fehler produzieren weil ich einen string mit eiern double verrechnen möchte

  • »haiyyu« ist männlich

Beiträge: 2 564

Dabei seit: 16. November 2008

Hilfreich-Bewertungen: 376

  • Private Nachricht senden

11

Samstag, 28. Januar 2012, 16:14

Genau.
Bitte keine Fragen bezüglich im Forum behandleten Themen per PN! Auch Bitten zur Beantwortung eines Themas per privater Nachricht wird nicht nachgekommen.

Bahaoth

Registrierter Benutzer

  • »Bahaoth« ist der Autor dieses Themas

Beiträge: 75

Dabei seit: 2. Januar 2012

  • Private Nachricht senden

12

Samstag, 28. Januar 2012, 16:29

Gut, das habe ich verstanden,
leider ist das Problem immer noch vorhanden.

EDIT:

habe es gelöst durch:
RichTextBox1.SaveFile(Pfad, RichTextBoxStreamType.PlainText)


ersetzt durch:


My.Computer.FileSystem.WriteAllText(Pfad, RichTextBox1.Text, False)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Bahaoth« (28. Januar 2012, 16:34)


RodFromGermany

Der Programmator

Beiträge: 5 880

Hilfreich-Bewertungen: 642

  • Private Nachricht senden

13

Samstag, 28. Januar 2012, 17:13

Sehr merkwürden.
Ich halte die ursprüngliche Lösung für sauberer.
Wenn schon die andere, dann nimm:

Visual Basic Quellcode

1
System.IO.File.WriteAllText(PFAD, INHALT)
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
VB-Fragen über PN werden ignoriert!

Social Bookmarks