# Leere Arrayfelder löschen



## VB? (25. Januar 2005)

Hallihallo,

ich habe vor die Datenfelder eines Arrays in eine Datei zuschreiben. Das klappt so weit auch, aber mich stören die leeren Datenfelder... (sind dann bei mir leere Zeilen in der txt-datei)
Diese leeren Datenfelder würde ich gerne erst gar nicht mit in die Datei übertragen! 
Ich denke, dass es dafür eigentlich einen recht einfachen Befehl geben müsste, oder ich es mit einer If-Funktion ausschließen könnte, aber ich finde nichts. 

Über ein bisschen Hilfe würde ich mich sehr freuen...


----------



## Merlin_78 (25. Januar 2005)

Hi,

wenn dein Array vom Datentyp String ist, kannst du es so machen:

```
For x = 1 To UBound(array)
	If array(x) <> "" Then
		Write dateinummer, array(x)
	End If
Next
```
 
wenn der Datentyp eine Zahl ist, mußt du die Null abfragen, da das Array automatisch mit Nullen gefüllt wird:

```
For x = 1 To UBound(array)
	If array(x) <> 0 Then
		Write dateinummer, array(x)
	End If
Next
```


----------



## VB? (25. Januar 2005)

Danke für diese (verdammt) schnelle Antwort...

Aber es  leider noch nicht, werde mal ein wenig ausprobieren! 
Hoffe, dass ich es irgendwie hingebogen krieg!

Er setzt mir jetzt fast alle Werte in Anführungszeichen  
Was macht den UBound genau

gruß VB?

PS: Datentyp ist string!


----------



## VB? (25. Januar 2005)

Cool, cool

Jetzt sind schon mal fast alle leer-zeilen weg! Aber die Werte stehen wie gesagt jetzt in anführungszeichen. Kriege ich die auch irgendwie weg 
Sonst kann ich die Daten nicht mehr richtig verarbeiten


----------



## Merlin_78 (25. Januar 2005)

Hi, 

ganz einfach. Nimm anstatt der _Write_-Methode die _Print_-Methode, dann sind die Anführungszeichen weg.

Über UBound erhältst du im Grund genommen die Arraylänge. Ist sinnvoll, wenn du das Array mal neu dimensionierst.


----------



## VB? (28. Januar 2005)

Schade, es funktioniert leider nicht so wie ich es mir gedacht habe. Die leeren Array-Felder werden trotzdem noch in die Text-Datei geschrieben...

Kann man das nicht irgendwie so schreiben, dass wenn ein Array-feld leer ist damit nichts gemacht wird und das nächste abgecheckt wird usw.

Hab im mom echt noch keine Ahnung wie ich das hinkriegen soll, aber trotzdem Danke für die Hilfe
Gruß
VB?


----------



## Merlin_78 (28. Januar 2005)

Hi VB?

kannst du vieleicht mal den Code posten?


----------



## VB? (28. Januar 2005)

Private Sub CmdTeilen_Click()
Dim x As Variant
Dim i As Integer
Dim j As Integer
Dim l As Integer
Dim complete As Variant
Dim nextline As Variant
Dim sarray2() As String

'ließt Daten TeilString in Datei
Open "C:\dats\werte2.txt" For Output As #1

For i = 0 To LstEinlesen.ListCount - 1
    LstEinlesen.ListIndex = i

    'Ruft Funktion zum Teilen des Strings auf
    Call Sub_ExtractLine(LstEinlesen.List(LstEinlesen.ListIndex), vbCrLf, 0, msarray())      
    Print #1, msarray(i) 'CStr(List1.Text)

    For j = 0 To 100
'Ruft Funktion zum Teilen des Strings auf
        Call Sub_ExtractLine(msarray(j), ";", 0, sarray2())    

            Print #1, sarray2(1) 'CStr(List1.Text)

    Next j
Next

Close #1

'Schreibt TeilString aus der Datei in Textfeld und ListBox
Open "C:\dats\werte2.txt" For Input As #1
Do While Not EOF(1)
    Line Input #1, nextline

    complete = complete & vbCrLf & nextline
Loop

Close #1
Text1.Text = complete
LstTeilen.AddItem CStr(complete)
End Sub
___________________________

Also ich habe Werte in einer Datei stehen:  
z.B: 
  10;15;20
  20;30;90
usw.

Jetzt will ich die Werte 15 und 30 heraus nehmen und in einer anderen Datei abspeichern. Das funktioniert ja auch so weit, aber die leeren Zeilen stören.
Brauchst du die Funk. zum Teilen der Daten auch?


----------



## Merlin_78 (28. Januar 2005)

Hi VB?

nur her damit. Es wäre schon hilfreich, wenn ich die auch hätte.


----------



## VB? (28. Januar 2005)

'Funktion um String aufzuteilen
Sub Sub_ExtractLine(ByVal sLine As String, ByVal Delimiter As Variant, _
                            ByRef lcount As Long, ByRef sArray() As String)

 Dim NewPos%, Oldpos%, i%, j%
 ReDim sArray(0 To 255)
 Oldpos = 1: i = 0

 If Val(Delimiter) Then
   Do
     NewPos = InStr(Oldpos, sLine, Chr(Delimiter), vbBinaryCompare)
     If NewPos > 0 Then sArray(i) = Mid$(sLine, Oldpos, (NewPos - Oldpos))
     If NewPos = 0 Then
       sArray(i) = Mid$(sLine, Oldpos, (Len(sLine) - Oldpos + 1))
     End If

     i = i + 1
     Oldpos = NewPos + 1
   Loop Until NewPos = 0

 Else
        Do
            j% = Len(Delimiter)
            NewPos = InStr(Oldpos, sLine, Delimiter, vbBinaryCompare)
            If NewPos > 0 Then sArray(i) = Mid$(sLine, Oldpos, (NewPos - Oldpos))
            If NewPos = 0 Then
                sArray(i) = Mid$(sLine, Oldpos, (Len(sLine) - Oldpos + 1))
            End If
            i = i + 1
            Oldpos = NewPos + j
        Loop Until NewPos = 0
 End If
   lcount = i
End Sub
______________________________

Bitte sehr ;o)
Wenn ich jetzt deine Funktion einbinde, gibt es immer irgendwelche Konflikte! z.B: werden mir die Daten aus der ersten Datei mit ausgegeben und darunter erst die Einzelwerte...
Wär schön wenn du eine Idee hättest..


----------



## Merlin_78 (28. Januar 2005)

Hi VB?

also so wie ich das verstanden habe, mußt du nur die Print-Anweisungen in der Sub CmdTeilen_Click() in If-Abfragen einbinden.

*If msarray(i) <> "" Then*
Print #1, msarray(i) 'CStr(List1.Text)
*End If*

*If sarray2(1) <> "" Then
*Print #1, sarray2(1) 'CStr(List1.Text)
*End If*


----------



## VB? (28. Januar 2005)

Ja logisch,
genau so was habe ich gesucht! 
So werden eben nur die Arrayfelder in denen wirklich etwas drin steht übernommen
Du hast mir echt geholfen..
Danke dir


----------

