ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
2475
2475
EMPFEHLEN
-
04.04.05 17:22 #1
- Registriert seit
- Jul 2004
- Beiträge
- 12
Hallo,
seit neuestem muss ich mich mit VB rumschlagen in meinem Praktikum und muss so zu Einstieg eine Asciidatei öffnen, in der zwei Zahlencodes und eine Beschreibung steht.
Bsp:
PN33341 -PK3344 Radlager links
PK45345 -PK4443 Gelenk vorn
.....
usw. (die Datei wird von einem anderen Programm erzeugt)
wie kann ich das nun am Besten in einem Unterprogramm anstellen, dass er gleich beim Öffnen Zeile für Zeile einliest und idealer Weise die Daten in verschiedene Arrays speichert. Ich möchte am Ende zwei Arrays voll mit ID-Nummmern und ein Array mit Beschreibung haben. Oder ist es nicht möglich die später wieder einander zuzuordnen und man daher praktischerweise Zeilenweise in den Array schreibt, ohne zu unterscheiden.
Wie würde das Einlesen bzw. Einschreiben in den Array denn aussehen in VB ?
Danke für Eure Hilfe
FunthomasX
-
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Public Dateiinhalt() As String ' globales Array für den Dateiinhalt public sub Datei_Einlesen(ByVal Datei As String) dim Dateinummer as long ' Variable für Dateinummer dim Zähler as long ' "Zeiger" für Array Zähler = 1 Dateinummer = freefile Open Datei For Input Access Read Lock Write As Dateinummer ' Öffne Datei Do ReDim Preserve Dateiinhalt(1 To Zähler) ' erweitere dynamisches Array um einen Eintrag Line Input #Dateinummer, Dateiinhalt(Zähler) ' Lies Zeilenweise die Datei Zähler = Zähler + 1 ' erhöhe Datensatzzähler um 1 Loop Until EOF(Dateinummer) ' Einlesen durchführen bis Dateiende Close Dateinummer end sub
Der Aufruf der Sub erfolgt mit dem Dateipfad/-namen als Argument, z.B.:
Code :1
call Datei_Einlesen("c:\Datei.txt")
Ich gebe keine Garantie, da ich den Code nicht getestet habe !Geändert von RamonR (05.04.05 um 19:56 Uhr)
Und wer unter Euch frei von Tippfehlern ist, der werfe die erste Tastatur.
-
04.04.05 20:01 #3
- Registriert seit
- Jul 2004
- Beiträge
- 12
danke erstmal..werde ich morgen auf der Arbeit mal probieren und schreib dann ob es geklappt hat.
Falls noch wer was weiss , immer her damit
FunthomasX
-
hi FanthomasX,
schau mal hier:
http://www.vb-fun.de/vb/tipps/tip0421.shtml
das nutze ich dazu.
Gruß Dionysus
-
05.04.05 15:45 #5
- Registriert seit
- Jul 2004
- Beiträge
- 12
Danke RamonR ,
dein Code hat gewirkt
hab noch ein 2 Sachen abgeändert, dann lief es ( z.B. lock write kann weggelassen werden und was ist eigentlich mit dem End If gemeint... hab ich gelöscht).
Auf jeden Fall macht es das was es soll er füllt den Array mit Daten die so aussehen:
=KM -4U4 left turnupring low pressure
=KM -10U1 left bladder high pressure
..........
Soweit so gut, jetzt wäre es von Vorteil, wenn ich die Texte geliedert wieder in ein weiteres Array schreibe, zb:
Array 1 : Array 2: Array 3:
=KM -4U4 left turnupring low pressure
=KM -10U1 ........
.... .... ....
kann ich jetzt mit Len() und Trim() das hinkriegen das er mit den Text wieder aufteilt oder gibt es eine Funktion die den Array Stück für Stück durchläuft und immer dann in einen Array schreibt, wenn ein Leerzeichen kommt ?
THX FunthomasX
-
Da gibt es die Split-Funktion die einen String nach einem beliebigen Trennzeichen durchsucht und in ein Array schreibt.
Syntax: Split(Expression, delimiter)
z.B.
Code :1 2 3
Dim Beispielstring as String Beispielstring = Split(Beispielstring, " ")
-
Hallo FunthomasX,
zu meinem Code:
Das "end if" war wirklich an der Stelle falsch, ich hatte die Sub schnell aus einem meiner Projekte rauskopiert und es aus versehen stehen lassen.
Das "lock write" bewirkt nur, dass bis zum Schließen der Datei kein anderes Programm schreibend auf sie zugreifen kann. Ist optional und nicht immer notwendig, schadet aber nichts.
Für das Problem des Zerlegens hat dignsag vollkommen rechts, da ist die Splitvar-Funktion optimal. Falls Du damit nicht klar kommst, poste einfach Deine Probleme !
Gruß
RamonUnd wer unter Euch frei von Tippfehlern ist, der werfe die erste Tastatur.
-
06.04.05 13:07 #8
- Registriert seit
- Jul 2004
- Beiträge
- 12
Hi,
wie erwarte läuft das mit Split und Filter nicht so wie ich will.
Ich liste mal den Code..
Code :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
Public Sub Datei_Einlesen(ByVal Datei As String) Dim Dateinummer As Long Dim Zähler As Long Zähler = 1 Dateinummer = FreeFile Open Datei For Input Access Read As Dateinummer Do ReDim Preserve Dateiinhalt(1 To Zähler) Line Input #Dateinummer, Dateiinhalt(Zähler) Debug.Print Dateiinhalt(Zähler) Zähler = Zähler + 1 Loop Until EOF(Dateinummer) Close Dateinummer End Sub Private Sub Command1_Click() Dim Zähler As Long ReDim Preserve ArrayZerlegt1(Zähler) ArraZerlegt1 = Split(Dateiinhalt) ' Fehlermeldung: Fehler beim kompilieren ' Typen unverträglich ' ArrayZerlegt1 = Filter(Dateiinhalt, "PK") Bei dem gibt er nur die erste Zeile aus Debug.Print ArrayZerlegt1(Zähler) End Sub
Also Split macht er schon mal gar nicht, da kommt immer "Fehler beim kompilieren Typen unverträglich" . Wenn ich den ArrayZerlegt1 über die Filterfunktion zerlegen will, dann haut er mir immer nur die erste raus(Im Debugfenster zu sehn). Er durchläuft nicht den kompletten Array. Eigenlich ist es egal was ich als Suchkette zu trenne angebe. Er haut immer die erste Zeile des Arrays Dateiinhalt raus.
Mein Ziel der Sache sollte eigentlich mal die endgültige Zerlegung des Arrays Dateiinhalt in drei Gruppen sein. Eine Gruppe (Arrray) mit ID-Nummer1 , dann die Gruppe Beschreibung und zuletzt noch einemal eine ID-Nummer2(wenn vorhanden).
Mit meinen Versuchen wollte ich ersteinmal probieren den eingelesenen Dateiinhalt aufzutrennen.
Tja .......
...was läuft falsch und wie kann mal das am Besten lösen
THX FunthomasX
-
06.04.05 16:18 #9
- Registriert seit
- Jul 2004
- Beiträge
- 12
Kommando zurück 1
ok, dass mit filter hab ich jetzt verworfen. Ein Kollege meinte das finge wohl nur unter VBScript. ich mach das jetzt folgendermaßen:
Neues Problem liegt nun in der neuen Startposition von der InStr() ! Bei den ersten beiden klappt es noch, dann hat er den neuen Startpunkt nich bei 10 sondern bei 6.Code :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
Private Sub Command1_Click() Dim x As Integer Dim Wort, Wortlänge, Erg Dim Startneu As Integer Dim Start As Integer ReDim Preserve ArrayZerlegt1(Zähler) Startneu = 1 For x = 1 To Zähler - 1 Debug.Print Dateiinhalt(x) Start = 0 Wort = 1 Do Start = Startneu Wort = InStr(Start, Dateiinhalt(x), Chr(9)) Wortlänge = Wort 'hier wie weitermachen Knackpunkt muss hier sein Erg = Mid(Dateiinhalt(x), Startneu, Wortlänge) Startneu = Wortlänge + 1 Debug.Print Erg ArrayZerlegt1(x) = Erg Debug.Print ArrayZerlegt1(x) Loop Until Wort = 0 Next End Sub
Hier der erste String der durchlaufen werden soll:
=PK -1Y4 main valve on 1
Das ist im moment so, dass ich den Wald vor Bäumen nicht sehen kann
THX FunthomasX
-
Hi FunthomasX
Also, wenn ich das alles so korrekt sehe, hast Du ja ein relativ feststehendes Muster in den Daten. Sie sind alle durch (ich vermute mal) ein Leerzeichen getrennt. Daraus würde ich ableiten, dass die Werte anhand dieser Tatsache extrahiert werden können.
Ich gehe davon aus, dass die Variablen Dateiinhalt und Zähler global definierte Variablen sind
Mein Ansatz:
Dim szZuZerlegen As String
Dim szWert1 As String
Dim szWert2 As String
Dim szWert3 As String
szZuZerlegen = Dateiinhalt(X)
szWert1 = Left$(szZuZerlegen, Instr(szZuZerlegen, " ") -1)
szZuZerlegen = Trim$(Mid$(szZuZerlegen, Instr(szZuZerlegen, " ") + 1))
szWert2 = Left$(szZuZerlegen, Instr(szZuZerlegen, " ") -1)
szWert3 = Trim$(Mid$(szZuZerlegen, Instr(szZuZerlegen, " ") + 1 ))
Damit hast Du jetzt drei Werte, die Du Deinem Array zuweisen kannst. Ich hoffe, ich habe keine Klammer oder Kommas vergessen. Wenn der Trenner wirklich CHR(9) ist wechsle einfach Instr(szZuZerlegen, " ") durch Instr(szZuZerlegen, Chr$(9)) aus.
Gruß
Das OrakelVorsicht dieser Link ist bissig :)Code :1 2 3 4 5 6 7 8 9 10 11
\\\\|//// \\ _ _ // ( o o ) ================oOOo-(_)-oOOo================== [COLOR=blue] The next time you think you are perfect, try walking on water[/COLOR] ========================Oooo=================== oooO ( ) ( ) ) / \ ( (_/ \_)
-
Hallo,
wenn Deine Datei so wie oben beschrieben aufgebaut ist (also immer 4 Einträge in einer Zeile, die durch Spaces getrennt sind), dann ist Split schon am Einfachsten
Code :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
public Array1() as String ' 4 Arrays für die zerlegten Einträge public Array2() as String public Array3() as String public Array4() as String public sub Zerlegen () dim Split_Array as string ' Variable zum Splitten dim i as long ' Zählvariable für for-Schleife for i = 1 to ubound(Dateiinhalt) step 1 ' Schleife für alle Einträge des Arrays Dateiinhalt Split_Array = split(trim(Dateiinhalt(i))," ") ' Splitte i.ten Eintrag nach Leerzeichen auf redim preserve Array1(1 to i) ' Laden 1. Wert um Array1(i) = Split_Array(1) redim preserve Array2(1 to i) ' Laden 2. Wert um Array2(i) = Split_Array(2) redim preserve Array3(1 to i) ' Laden 3. Wert um Array3(i) = Split_Array(3) redim preserve Array4(1 to i) ' Laden 4. Wert um Array4(i) = Split_Array(4) next i end sub
Nach dem Aufruf der Funktion sollten die einzelnen Eintrage des Arrays Dateiinhalt in den Arrays Array1 - Array4 stehen !
Wie immer keine Gewähr, da ich es nicht getestet habe !
Gruß
RamonGeändert von RamonR (07.04.05 um 23:25 Uhr)
Und wer unter Euch frei von Tippfehlern ist, der werfe die erste Tastatur.
-
07.04.05 09:48 #12
- Registriert seit
- Jul 2004
- Beiträge
- 12
Hi,
hat geklappt. ich habe gestern Abend doch noch ein Denkanstoss gefunden mit dem es geklappt hat. Hab es so ähnlich wie Orakel es beschreiben hat gemacht.
Code :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
Private Sub Command1_Click() Dim x As Integer Dim Index, Wortlänge, Erg Dim Startneu As Integer Dim Start As Integer ReDim Preserve ArrayZerlegt1(Zähler) Startneu = 1 For x = 1 To Zähler - 1 'Debug.Print Dateiinhalt(x) Start = 1 Index = 1 Do Index = InStr(Start, Dateiinhalt(x), Chr(9)) If Index = 0 Then Exit Do Erg = Mid(Dateiinhalt(x), Start, Index - Start) Start = Index + 1 'Debug.Print Erg ArrayZerlegt1(x) = Erg Debug.Print ArrayZerlegt1(x) Loop Until Index = 0 Next End Sub
so..danke für eure gute Hilfe. Jetzt muss ich erstmal ein bissel lesen, wie ich werte von einem Array in eine Datenbankdatei ( mdb) schreiben kann. Ich melde mich dann wieder wenn ich Rat brauch. Hat einer von euch ein guten Tip wo es gute Tuts oder Beispiele gibt?
Funthomas
Ähnliche Themen
-
CSV Datei auslesen und in Array speichern
Von MaRlik im Forum C/C++Antworten: 3Letzter Beitrag: 27.04.09, 15:59 -
Dateien (bilder oder pdfs) öffnen und unter neuem pfad speichern
Von soulerino im Forum JavaAntworten: 10Letzter Beitrag: 14.08.07, 12:07 -
Datei öffnen und Text in JTextArea einfügen bzw. Datei speichern in txt-File
Von freihsve im Forum JavaAntworten: 4Letzter Beitrag: 19.09.06, 10:09 -
Speichern und öffnen unter Crystal Reports 9.0
Von John-Lurie im Forum TypografieAntworten: 0Letzter Beitrag: 30.06.04, 10:20 -
PDF Datei mit PW unter PS öffnen?
Von Wolfsbein im Forum PhotoshopAntworten: 1Letzter Beitrag: 23.04.02, 14:39





Zitieren
Login





