| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: CSV - Dateien einlesen (4623 mal gelesen)
|
Stagladasy Mitglied Ingenieur
Beiträge: 21 Registriert: 02.01.2007
|
erstellt am: 05. Jan. 2007 14:59 <-- editieren / zitieren --> Unities abgeben:
Hilfe, versuche gerade mit VBA unter AutoCAD 2002 csv-Dateien anzusprechen und aus ihnen gezielt Werte herauszuholen um sie anschließend Variablen zuzuweisen. Kann mir von Euch jemand weiterhelfen? Danke
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 05. Jan. 2007 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für Stagladasy
Hallo, die Könnte man vorher in Excel einlesen oder du liest die Datei z.B. mit line input#1, Zeile und bröselts sie Felder mit Hilfe der Funktion Split in ein Variant Array auf. Da kannst du die Felder ja lesen und auswerten. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stagladasy Mitglied Ingenieur
Beiträge: 21 Registriert: 02.01.2007
|
erstellt am: 06. Jan. 2007 15:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Stelli, erstmal danke für Deine Antwort. Ich habe nun schon eine ganze Zeit hin und her probiert bin aber zu keinem brauchbarem Ergebnis gekommen. Falls Du mir mit einem kleinem Programmcode unter die Arme greifen könntest, mit dem es möglich ist die beigefügte csv-Datei als Array, ohne die Verwendung von Excel, einlesen zu können wäre das echt prima. Vielen Dank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 06. Jan. 2007 16:35 <-- editieren / zitieren --> Unities abgeben: Nur für Stagladasy
Hallo, versuchs doch mal so
Code: Sub test() Dim Datei As String Dim DatenZeile As String Dim AnzZeilen As Long Dim Kanal As Integer Dim Feld As Variant Dim i As Integer Datei = "C:\temp\schnee.csv" Kanal = FreeFile Open Datei For Input As #Kanal While Not EOF(Kanal) AnzZeilen = AnzZeilen + 1 Line Input #Kanal, DatenZeile Feld = Split(DatenZeile, ";") For i = LBound(Feld) To UBound(Feld) Debug.Print "Zeile " & AnzZeilen & " Feld " & i & ": " & Feld(i) Next i Wend Close (Kanal)End Sub
Stelli------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 06. Jan. 2007 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für Stagladasy
Hallo, mal als kleiner Ansatz, wobei die csv rechteckig! aufgebaut sein muss, sonst wird's Mist;-)
Code:
Sub x() Dim Feld Feld = toArray("d:\Schnee.csv") Stop End SubFunction toArray(Datei As String) As Variant Dim fso As Object, s$, sr, r&, c% Set fso = CreateObject("scripting.filesystemobject") s = fso.GetFile(Datei).OpenAsTextStream.ReadAll sr = Split(s, Chr(13)) ReDim arr(0 To UBound(sr) - 1, 0 To UBound(Split(sr(0), ";"))) 'EOF in sr() drin? For r = 0 To UBound(arr, 1) For c = 0 To UBound(arr, 2) arr(r, c) = Split(sr(r), ";")(c) Next Next toArray = arr End Function
Gruß, Nancy [edit: ... die immer too late ist] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stagladasy Mitglied Ingenieur
Beiträge: 21 Registriert: 02.01.2007
|
erstellt am: 09. Jan. 2007 14:15 <-- editieren / zitieren --> Unities abgeben:
|
Maximilianus Mitglied PLM-Consultant
Beiträge: 136 Registriert: 28.05.2004 Catia V5 21 CADENAS PARTsolutions / Exalead OnePart V8.1.09 / V9.0.8 Windows 2000/XP/2003 Server/2010, HP-UX, Linux
|
erstellt am: 23. Apr. 2007 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für Stagladasy
Hallo, weil das hier gut dazupasst, hänge ich es mal gleich an: Ich habe ebenfalls eine CSV-Datei, die wie folgt aussieht: Suchwert1; Zielwert1 Suchwert2; Zielwert2 Suchwert3; Zielwert3 Suchwert4; Zielwert4 ... Das Skript liefert einen Suchwert, zu dem aus der CSV der passende Zielwert gesucht und an eine Variable übergeben werden soll. Hat dazu jemand eine Idee? Ich komme mit der Suche im Array nicht zurecht, wie dass aussehen muss. Ich formuliere es mal so: While not EOF Wenn Suchwert = SucherwertX Dann Zielwert = ZielwertX exit Function Hat jemand eine Idee? Das ganze in VBScript. Maximilianus
------------------ Maximilianus Dipl.-Ing. (Wi-Ing ET) PLM-Consultant Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1521 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 23. Apr. 2007 09:50 <-- editieren / zitieren --> Unities abgeben: Nur für Stagladasy
Hallo, da ar auch schon mal die Variante anderes herum. Schreiben einer CSV Da brauchst du nur noch zwei Funktionen hinzufügen. - eine Funktion die die Zeile sucht in dem der Wert vorkommt - eine Funktion die den Wert aus Spalte und Zeile zurückgibt Das mit deiner Schleife ist auf jeden Fall der richtige Ansatz. Nach deinem Profil hast du Catia. Mit welcher Art von VB arbeitest du denn ? Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maximilianus Mitglied PLM-Consultant
Beiträge: 136 Registriert: 28.05.2004
|
erstellt am: 23. Apr. 2007 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für Stagladasy
Das läuft außerhalb von CATIA, nämlich im VBS-Interpreter von PARTsolutions. Der versteht normales VBS. Danke für den Hinweis, werde ich mir anschauen. Maximilianus ------------------ Maximilianus Dipl.-Ing. (Wi-Ing ET) PLM-Consultant Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |