Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Zahl aus Textdatei einlesen.

Begonnen von Juno, Oktober 27, 2010, 09:35:23

⏪ vorheriges - nächstes ⏩

Juno

Sobald ich nach dem | etwas eintrage dann bekomme ich diese Fehlermeldung:
Index außerhalb des gültigen Bereichs.

Mir wird dann diese Zeile angezeigt:
Switch(sUeberscrift = "bmu.bgs", sf(0), sUeberscrift = "bmu.nwl", sf(1), sUeberscrift = "bmu.uns", sf(2)) & _

lumbumba

#31
Anbei aktualisierte:

---

Juno

#32
Vielen Dank. Das funktioniert jetzt fast  ;)

Wenn ich folgendes eintrage "||text" und ich von bmu.bgs ausgehe dann bekommen ich  "","" eingetragen

Wenn ich aber "text||" eintrage habe ich keine Probleme

Außerdem wenn ich den Inhalt in eine Textdatei exportiere werden zu viele "" gesetzt.
Der Inhalt sieht dann so aus:
"""Feldbeschreibung"",""Feldinhalt""
""Feldbeschreibung2"",""Feldinhalt""
"

Wie kann ich das verhindern?

lumbumba

Du must durch eine simple Routine prüfen ob in dem entsprechenden String des Arrays etwas steht

bezogen auf das Bso.
...
For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & "Write #ff " & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & "Write #ff " & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld
....
---

Juno

was ist das "s". (Variable nicht definiert)

lumbumba

Wenn du in deinen Modulen "Option Explicit" verwendest, was ich auch immer anschalte, mußt du jede verwendete Variable dimmen, sprich in diesem Fall die Zeile
Dim s as string
einfügen.

"Option Explicit" kannst du aber auch ausschalten, wenn man sehr einfache Variablen verwendet aus ein oder zwei Buchstaben, nur wenn die Namen komplexer werden kannst du ggf. richtig Spaß haben wenn's an die Fehlersuche geht.
---

Juno

ok.

Hättest du auch eine Lösung für das Problem mit den "" siehe #32?

lumbumba

Achso, hab ich überlesen. ;D
nimm mal alle Chr(34) & raus

---

Juno

Dann verschwinden alle!!

Wenn ich das in einem Textfeld ausgebe dann stimmt das alles. Wenn ich das aber in eine Textdatei ausgebe dann habe ich entweder alle "" doppelt (mit & Chr(34) oder überhaupt nicht (ohne & Chr(34). Macht das sinn????

So ist mein code:
...
strDateiname = "E:\.....\" & Me![vk_nr] & ".bs"

   
    sUeberschrift = [vktyp_nameopt]   '<-- hier muß der Wert Übberschrift erzeugt werden
   
   
    Set rs = Me.Recordset
    For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld

    Open strDateiname For Output As #1
           Write #1, sOut

    Close #1

lumbumba

Anbei wieder ein codeschnipsel, beachte aber da ich nicht weis wie die erzeugte Datei von dir gehandhabt wird, dies nur möglichkeiten sind, welche aber ggf. nicht für dich geeignet ist.
Prozedere:
eine vorhandene Datei wird gelöscht, und danach wieder mit neuen Inhalt erstellt

...
...
    For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld

    Dim ff As Integer
    ff = freefile
    Kill strDateiname
    Open strDateiname For Binary As #ff
    Put #ff, , sOut
    Close #ff





Soll aber der vorhanden Text erhalten bleiben und der neue Text Angefügt werden so lautet die
Code (Putzeile) [Auswählen]
Put #ff, LOF(ff) + 1, sOut

Soll jetzt aber der vorhandene Text erhalten bleiben aber nach unten geschoben werden so ist dieser Text zunächst einzulesen, mit dem neuen String zu mischen und wieder zurückzuschreiben.

dim sSave as string
...
Open strDateiname For Binary As #ff
sSave = string$(lof(ff),0)
Get #ff, , sSave
sOut = sOut & sSave
SEEK #ff,1
Put #ff, , sOut
Close #ff



bei den beiden zuletzt genannten ist aber die Zeile Kill strDateiname zu deaktivieren.
---

Juno

#40
Danke deine Codes helfen mir zwar, aber nicht um das oben angesprochene Problem zu lösen.

Anbei ein paar Dateien um dir das Problem zu zeigen. Die sample... Datei ist die Vorgabe. So muss die Datei aussehen.
die 91...-Datei ist erstellt mit "& Chr(34)". Die 81....-Datei ist ohne"& Chr(34) erstellt. Vergleich mal die "Anführungszeichen".

lumbumba

#41
Kann ich so nicht bestätigen, bei mir wird die Datei mit dem oben dargestellten Code irgendwie richtig nach deinen Vorgaben erzeugt.
---

Juno

Ich habe aber immer noch das Problem mit den Anführungszeichen. Kann man irgendwo einstellen ob man die mit exportieren möchte?
Wie gesagt wenn ich das in ein Textfeld exportiere dann habe ich das gleiche Ergebnis wie du. Aber wenn ich das ganze in eine Textdatei exportiere dann erscheinen die extra Anführungszeichen....

lumbumba

Zitat von: Juno vom November 04, 2010, 15:25:01So ist mein code:...
strDateiname = "E:\.....\" & Me![vk_nr] & ".bs"

   
    sUeberschrift = [vktyp_nameopt]   '<-- hier muß der Wert Übberschrift erzeugt werden
   
   
    Set rs = Me.Recordset
    For Each fld In rs.Fields
        For Each prop In fld.Properties
            If prop.Name = "Description" Then
                sf() = Split(prop.Value, "|")
                If UBound(sf) >= 1 Then
                    s = Switch(sUeberschrift = "bmu.bgs", sf(0), sUeberschrift = "bmu.nwl", sf(1), sUeberschrift = "bmu.uns", sf(2))
                    If Len(s) > 0 Then sOut = sOut & Chr(34) & s & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                Else
                    sOut = sOut & Chr(34) & prop.Value & Chr(34) & ", " & Chr(34) & rs(fld.Name) & Chr(34) & vbCrLf
                End If
            End If
        Next prop
    Next fld

    Open strDateiname For Output As #1
           Write #1, sOut

    Close #1

Dieser dein Code erzeugt Textdateien mit zu vielen ". Das liegt daran das du die Datei im Output-Modus (Open strDateiname For Output As #1)

Wenn du hingegen die Datei im binary-Modus öffnest und mit Put in die Datei schreibst, wird genau das übertragen was in dem String sOut steht, und es werden keine zusätzlichen " erzeugt.

Open strDateiname For Output As #1
Write #1, sOut
Close #1


ff = Freefile
Open strDateiname For Binary As #ff
Put #ff, , sOut
Close #ff






---

Juno