MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 20.01.2005, 08:05   #1
stine1
Neuer Benutzer
Neuer Benutzer
Standard VBA - Daten aus Textdatei lesen

Hallo,
Ich hab schon wieder ein nerviges Projekt auf der Arbeit zu erledigen:
Es gibt zwei Textdateien, in denen Daten in Tabellenform stehen. Ich soll nun aus jeder Textdatei bestimmte Daten auslesen und zusammen in einer dritten neu abspeichern.
Mein Problem ist ein ziemlich hartnäckiger Laufzeitfehler 91. Ich markiere ihn rot:

Code:

Option Explicit

Sub Zusammen()
'
' Zusammen Makro
' Makro am 18.01.2005 von metaframe aufgezeichnet
'
Dim I As Integer
Dim oFSO As Object
Dim oFile As Object
Dim txtLine As Object
Dim sLines() As String
Dim plu As String
Dim bez As String
Dim wg As String
Dim euro As Integer
Dim cent As Integer
Dim ean As String
Dim ReadLine As Object





Open "M:\PFLEGE.txt" For Input As #1
Set oFSO = CreateObject("Scripting.FileSystemObject")
'soll den Text als String einlesen
    For I = 1 To 5000 '5000 Zeilen
        sLines = Split(oFile.ReadAll, vbCrLf)
        txtLine.Text = ReadLine("M:\PFLEGE.txt", I)
        plu = Mid(sLines, 3, [6])
        bez = Mid(sLines, 9, [30])
        wg = Mid(sLines, 39, [40])
        euro = Mid(sLines, 42, [46])
        cent = Mid(sLines, 48, [49])
        'liest benötigte Tabellendaten aus der Textdatei wie z.b. plu-nummer und bez(eichnung)
        
    Next I



Open "M:\EAN.prn" For Input As #2
Set oFSO = CreateObject("Scripting.FileSystemObject")
    For I = 1 To 5000
        sLines = Split(oFile.ReadAll, vbCrLf)
        txtLine.Text = ReadLine("EAN.prn", I)
        ean = Mid(sLines, 30, [39])
        'liest die zusätzlich benötigten daten aus der zweiten datei
    Next I
                

Open "M:\ausgabe.txt" For Input As #3
    Print #3, ean
    Print #3, Spc(5)
    Print #3, bez
    Print #3, Spc(5)
    Print #3, wg
    Print #3, euro; ","; cent
    'sollte die daten aus 1 und 2 mit jeweils 5 leerzeichen abstand in 3 schreiben


Close "M:\PFLEGE.txt"
Close "M:\EAN.prn"
Close "M:\ausgabe.txt"
'schließen



End Sub
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.01.2005, 11:32   #2
Lumpensammler
MOF Meister
MOF Meister
Standard

Hallo, Stine,

wo wird denn oFile ein Wert zugewiesen?

Gruß
LS

__________________

Man muß viel gelernt haben, um das, was man nicht weiß, erfragen zu können. (Jean-Jacques Rousseau)
Wer nicht kann, was er will, muß das wollen, was er kann. (Leonardo da Vinci)
Lumpensammler ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.01.2005, 15:03   #3
sturzi
MOF User
MOF User
Standard

hallo stine1

Mir ist leider nur ein anderer Fehler aufgefallen Du benützt 3 x For Input ... Für Ausgaben gibt es z.B for output.

Ps. ich gebe zu dass ich das CreateObject("Scripting.FileSystemObject") nie benütze. Bei mir reicht schon oft ein line Input

Gruss

__________________

Alles wird besser als man denkt!!!
sturzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.01.2005, 16:36   #4
sturzi
MOF User
MOF User
Standard

hallo Stine1

falls Du es ohne dises Objekt machen willst...


Code:

Sub Zusammen()
'
' Zusammen Makro
' Makro am 18.01.2005 von metaframe aufgezeichnet
' von Sturzi etwas abgeändert 20.01.05
'
Dim I As Integer
Dim plu As String
Dim bez As String
Dim wg As String
Dim euro As Integer
Dim cent As Integer
Dim ean As String
Dim temp As String
 
 
 
Open "M:\PFLEGE.txt" For Input As #1
Open "M:\EAN.prn" For Input As #2
Open "M:\ausgabe.txt" For Output As #3
 
Do While Not EOF(1)
    Line Input #1, temp
        plu = Mid(temp, 3, 6)
        bez = Mid(temp, 9, 30)
        wg = Mid(temp, 39, 40)
        euro = Mid(temp, 42, 46)
        cent = Mid(temp, 48, 49)
     Line Input #2, temp
       ean = Mid(temp, 30, 39)
     Print #3, ean & String(5, " ") & bez & String(5, " ") & wg & euro & "," & cent
Loop
 
Close #1
Close #2
Close #3
 
 
End Sub
Code eingefügt mit dem MOF Code Converter

Gruss Sturzi

(leider nicht getestet...)

__________________

Alles wird besser als man denkt!!!

Geändert von sturzi (20.01.2005 um 16:44 Uhr).
sturzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 07:23   #5
stine1
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Danke für die Hilfe.
Leider kommt hier die Meldung, dass die Typen unverträglich sind:

euro = Mid(temp, 42, 46)
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 08:27   #6
Unimatrix Zero
MOF User
MOF User
Standard

Hallo Stine1,

Typen unverträglich kann ja jetzt nur heißen, daß 'Mid(temp, 42, 46)' kein Integer als Ergebnis hat.
Kannst Du denn nicht einfach mal kurz zwei Textfiles mit Beispieldaten hochladen, dann kann man Dir auch helfen.
Wobei Lumpensammler eigtl. in dem ersten Code von Dir schon die Lösung gepostet hat. Du verwendest die Microsoft Scripting Runtime Object Library und
declarierst oFile, dann mußt Du auch oFile mit der Set-Anweisung festlegen.

__________________


LG
Unimatrix Zero

_________________________
<= Die Welt um mich herum ist in mir - (Blaise Pascal) =>

Unimatrix Zero ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 09:15   #7
stine1
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Ok, ich hab wieder mal nur die Hälfte verstanden *g*
Hier mal Beispiele für die Textdateien:

Nummer1:

( 1) Tasse Kaffee F 3 (10) 1.70 1.47

1 = plu
Tasse Kafee = bez
1.70 = Preis, also: 1 = euro und 70 = cent

Nummer2:

1 Tasse Kaffee 26356

26356 = ean
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 10:10   #8
Unimatrix Zero
MOF User
MOF User
Standard

Hallo Stine1,

alles klar, ich schau es mir an, bin gerade in der Arbeit.

__________________


LG
Unimatrix Zero

_________________________
<= Die Welt um mich herum ist in mir - (Blaise Pascal) =>

Unimatrix Zero ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 10:30   #9
stine1
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Danke!
Hier nochmal mein aktuellster Code. Da sit aber auch der Wurm drin, weil nur Müll rauskommt:
26356 ikel E(10U ,
ikel E(10U ,

Code:

Sub Zusammen()
'
' Zusammen Makro
' Makro am 18.01.2005 von PSMZC aufgezeichnet
'
Dim plu As String
Dim bez As String
Dim wg As String
Dim eur As String
Dim cent As String
Dim ean As String
Dim temp As String
 
 
 
Open "M:\PFLEGE.txt" For Input As #1
Open "M:\EAN.prn" For Input As #2
Open "M:\ausgabe.txt" For Output As #3
 
Do While Not EOF(1)
    Line Input #1, temp
        plu = Mid(temp, 3, 4)
        bez = Mid(temp, 9, 20)
        wg = Mid(temp, 39, 2)
        eur = Mid(temp, 45, 2)
        cent = Mid(temp, 48, 2)
Loop
Do While Not EOF(2)
       Line Input #2, temp
       ean = Mid(temp, 30, 5)
     Print #3, ean; Spc(5); bez; Spc(5); wg; Spc(5); euro; ","; cent
Loop
 
Close #1
Close #2
Close #3
 
 
End Sub
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 17:23   #10
sturzi
MOF User
MOF User
Cool

Hallo Stine

Dein erstes While weist Du mit Mid(xx,xx) irgendwelche Variablen zu, die gleich wieder gelöscht werden???. Sicherlich musst du während der gleichen Schlaufe die ersten beiden Dateien einlesen und ausgeben sonst bekommst Du sicherlich Müll raus...


so sollte es sein:
While
Datei 1 einlesen
Datei 2 einlesen
Datei 3 schreiben
wend

Ach ja. Unimatrix hat es ja schon erwähnt: Falls Du mal die zwei Dateien hochlädst (vielleicht je 20 Zeilen, kannst ja den Editor benützen) könnten wir Dir sicherlich besser helfen. Es könnte ja sein, dass diese Datei im Binari abgespeichert ist.....




Gruss
Sturzi

__________________

Alles wird besser als man denkt!!!
sturzi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 21.01.2005, 18:24   #11
Unimatrix Zero
MOF User
MOF User
Standard

Hallo Stine1,

ohne ein Beispiel-Textfile kann ich jetzt nur vermuten was u.a. falsch läuft.
Ich nehme jetzt mal an, das die Texte 'Tab-Separated' sind und Du deswegen zu
dieser merkwürdigen Textausgabe kommst.
Ich lade jetzt hier mal die zwei Beispiel-Textfiles hoch mit denen ich folgenden Code getetstet habe:
Code:

Option Explicit

Sub Zusammen()
Dim ofso As FileSystemObject
Dim ofile1 As TextStream
Dim ofile2 As TextStream
Dim ofile3 As TextStream
Dim slines1() As String
Dim slines2() As String
Dim i&, lpos&
Dim plu$, bez$, wg$, eur$, cent$, ean$

  Set ofso = New FileSystemObject
  'Pfad muß angepasst werden!
  Set ofile1 = ofso.OpenTextFile("C:\Text1.txt")
  Set ofile2 = ofso.OpenTextFile("C:\Text2.txt")
  'Ausgabe.txt wird hier erzeugt!
  'Mußt Du evtl. bei Dir anpassen
  Set ofile3 = ofso.OpenTextFile("C:\Dokumente und Einstellungen\Unimatrix Zero\Desktop\Ausgabe.txt", ForWriting, True)
  Do While Not ofile1.AtEndOfStream
    slines1 = Split(ofile1.ReadLine, vbTab)
    plu = slines1(0)
    bez = slines1(1)
    wg = slines1(2)
    lpos = InStr(slines1(4), ".")
    eur = Left(slines1(4), lpos - 1)
    cent = Right(slines1(4), Len(slines1(4)) - lpos)
    'Achtung, funktioniert nur so, wenn die Zeilen der zwei Textfiles übereinstimmen
    'ansonsten müßte man hier noch eine Suchfunktion einbauen!
    slines2 = Split(ofile2.ReadLine, vbTab)
    ean = slines2(2)
    ofile3.WriteLine (ean & vbTab & bez & vbTab & wg & vbTab & eur & vbTab & cent)
  Loop
  ofile1.Close
  ofile2.Close
  ofile3.Close
  Set ofile1 = Nothing
  Set ofile2 = Nothing
  Set ofile3 = Nothing
  Set ofso = Nothing
End Sub
Angehängte Dateien
Dateityp: txt Text1.txt (110 Bytes, 25x aufgerufen)
Dateityp: txt Text2.txt (62 Bytes, 15x aufgerufen)

__________________


LG
Unimatrix Zero

_________________________
<= Die Welt um mich herum ist in mir - (Blaise Pascal) =>

Unimatrix Zero ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2005, 07:31   #12
stine1
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo, Ich werde jetzt mal versuchen, Beispieldateien hochzuladen....
Angehängte Dateien
Dateityp: txt PFLEGE-test.txt (165 Bytes, 27x aufgerufen)
Dateityp: txt ean-test.txt (80 Bytes, 22x aufgerufen)

Geändert von stine1 (24.01.2005 um 07:34 Uhr).
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2005, 12:00   #13
stine1
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Ich nochmal *g*
Also, wenn ich bezüglich der Zeilen eine Schleife einbauen will, wie mache ich das? So, dass jede Zeile für sich nacheinander abgefragt wird?

For I = 1 to "EndofFile" ' was nehm ich da anstatt EndofFile?
Und dann eben so weiter, dass I immer um eins erhöht wird und die nächste Zeile ausgelesen werden kann...
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 24.01.2005, 14:06   #14
stine1
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Sorry, dass ich schon wieder poste, aber ich hab nicht gefunden, wie ich meinen vorherigen Post editieren kann :-(

Ich kann Entwarnung geben. Ich habe eine Lösung gefunden. Ein Arbeitskollege hat sich die Haare gerauft und es gerichtet. Wirtschaftsinformatiker ;-)

Hier die Lösung:

Code:

Sub Zusammen()
'
' Zusammen Makro
' Makro am 18.01.2005 von PSMZC aufgezeichnet
'
Dim plu As String
Dim bez As String
Dim wg As String
Dim eur As String
Dim cent As String
Dim ean As String
Dim temp As String

 
Open "M:\Aufgabe\2\Versuch\PFLEGE.txt" For Input As #1
Open "M:\Aufgabe\2\Versuch\EAN.prn" For Input As #2
Open "M:\Aufgabe\2\Versuch\ausgabe.txt" For Output As #3



' öffnet die vorhandenen Dateien und erstellt die Ausgabe-Datei

 

Do While Not EOF(1) And Not EOF(2) ' Schleife bis zum Ende der Datei

    Line Input #1, temp
        plu = Mid(temp, 4, 4)   ' PLU-Nummer
        
        bez = Mid(temp, 9, 20) ' Artikelbezeichnung
        
        wg = Mid(temp, 39, 2)   ' Warengruppe
        
        eur = Mid(temp, 42, 5)  ' Eurobetrag
        
        cent = Mid(temp, 48, 2) ' Centbetrag
        
    Line Input #2, temp
    
        ean = Mid(temp, 30, 5)   ' EAN-Nummer
        
    'Alternativ:
    'If ean <> "" and  bez <> "" Then
    'Das würde neben den leeren Zeilen auch EANs auslassen zu denen es keine Produktbezeichnung gibt.
    If ean <> "" Then
        Print #3, ean; Spc(3); bez; Spc(3); wg; Spc(3); eur; ","; cent
    End If
    ' schreibt die Werte in die Ausgabedatei inklusive Komma für den Preis und Leerschritte zwischen den Werten
        
Loop
 
Close #1
Close #2
Close #3
' Schließt alle Dateien


End Sub
stine1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.