Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Werte in csv-Datei schreiben

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
Autor Thema:  Werte in csv-Datei schreiben (3121 mal gelesen)
Stagladasy
Mitglied
Ingenieur


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 02. Feb. 2007 11:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


FEM_CAD_2.txt

 
Hallo liebe Leute,

für eine Anwendung unter VBA 6 suche ich einen Code, mit dem es möglich sein soll, den Wert einer Variablen gezielt in ein bestimmtes (leeres) Datenfelder einer bestehenden csv-Datei (attachment) zu schrieben und anschließend zu speichern. Als Seperatoren sollen Semikolons verwendet werden und das ganz muss ohne Excel möglich sein.

Vielen Dank

Uwe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 02. Feb. 2007 12:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hallo Uwe,

eigentlich ist es fast ein Umkehr zum Einlesen oder so

Code:
Sub test()
    Dim fso As New FileSystemObject
    Dim DateiName As String
    Dim BakName As String
    Dim Quelle As TextStream
    Dim Ziel As TextStream
   
    Dim Zeile As String
    Dim Reihe As Long
    Dim ZielReihe As Long
    Dim Spalte As Long
    Dim ZielSpalte As Long
    Dim NeuerWert As String
    Dim Spalten As Variant
    Dim i As Long
   
    DateiName = "C:\temp\FEM_CAD_2.txt"
    BakName = fso.GetBaseName(DateiName) & ".BAK"
    ZielReihe = 5
    ZielSpalte = 2
    NeuerWert = "TEST"
   
    fso.MoveFile DateiName, BakName
    Set Quelle = fso.OpenTextFile(BakName, ForReading)
    Set Ziel = fso.OpenTextFile(DateiName, ForWriting, True)
   
    While Not Quelle.AtEndOfStream
        Reihe = Reihe + 1
        Zeile = Quelle.ReadLine
        If Reihe = ZielReihe Then
           Spalten = Split(Zeile, ";")
           Spalten(ZielSpalte) = NeuerWert
           For i = 0 To UBound(Spalten)
               Ziel.Write Spalten(i) & ";"
           Next i
           Ziel.Write vbCrLf
        Else
           Ziel.WriteLine Zeile
        End If
       
    Wend

    Ziel.Close
    Quelle.Close
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

Stagladasy
Mitglied
Ingenieur


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 02. Feb. 2007 16:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stelli,

dank Dir für Deine Antwort, aber das Sub läuft bei mir leider gar nicht. Die Datentypen "FileSystemObject" und "TextStream" scheinen nicht bekannt zu sein, so dass er an dieser Stelle den Prozess schon abbricht.
Kann es sein, dass diese Typen erst in späteren Versionen als AutoCAD 2002 hinzugekommen sind?

Danke

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

AutoCAD ACA 2024
Solidworks 2022 Sp5
Enterprise PDM 2022 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell Precision 3660
Intel Core i9-12900K
32 GB Arbeitsspeicher
2x Dell U2415

erstellt am: 02. Feb. 2007 17:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hi,

Setz mal unter Verweise (Unter Extras) den Verweis auf Microsoft Scripting Runtime. Dann sollte es laufen.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 02. Feb. 2007 18:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hallo Carsten,

:top

@Uwe
diesen Verweis müsstes du aber eigentlich schon zum Einlesen eingestellt haben. (hier)

------------------
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


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 02. Feb. 2007 18:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Carsten,

dank Dir, echt super. Und trotz alledem noch eine letzte Frage. Wennn ich das sub jetzt als Schleife durchlaufen lassen will, so dass er das nächste mal an eine andere Position einen Wert schreibt - kommt die Meldung "Datei existiert bereits" - was müsste man diesbezüglich ändern?

Vielen Dank

Uwe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 02. Feb. 2007 18:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hallo Uwe,

zuerst prüfen ob es das BakFIle gibt
fso.Fileexist Bakfile

wenn ja dann löschen
fso.removefile BakFIle

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

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 02. Feb. 2007 18:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hallo Uwe,

mir ist noch aufgefallen das du eine Stelle noch einfacher hinbekommst

Code:
''' ALT
          Spalten(ZielSpalte) = NeuerWert
          For i = 0 To UBound(Spalten)
              Ziel.Write Spalten(i) & ";"
          Next i
          Ziel.Write vbCrLf

''' Neu
          Spalten(ZielSpalte) = NeuerWert
          Ziel.WriteLine Join(Spalten,";")



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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 02. Feb. 2007 18:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hi Uwe,

DU musst natürlich die .Bak erst wieder löschen, wenn die vorhanden ist.
Hier findest du auch noch ein paar Sachen zum FileSystemObject.

Gruß, Carsten

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stagladasy
Mitglied
Ingenieur


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 02. Feb. 2007 19:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Prima,
es lag an der .bak Datei. Nach dem sie gelöscht ist läuft das Sub wieder. Was jedoch nicht ganz einleuchtet ist, warum er die .bak in ein  ganz anderes Verzeichnis schreibt - nach meinem Dafürhalten - eines welches gar nichts mit AutoCad bzw. der Datei zu tun hat. Habt Ihr da eine Antwort zu.

Danke

Uwe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stagladasy
Mitglied
Ingenieur


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 02. Feb. 2007 19:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stelli und Carsten,

habe den Rechner neu gestartet und jetzt schreibt er die Bak in's AutoCad Verzeichnis - macht jetzt alles wieder Sinn.
Also vielen Dank an Euch beide für Eure Hilfe.

Gruß Uwe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stagladasy
Mitglied
Ingenieur


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 25. Feb. 2007 09:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


ERG_VT_ID.txt

 
Hallo liebe Leute,

bzgl. des auch schon oben stehenden Sub’s würde ich gerne, dass dieses Sub mehrfach per Schleife durchlaufen werden kann und sich die Zeilen bzw. Spalten, also die Datenfelder in die geschrieben werden sollen, ändern. Nun wird die Schleife zwar entsprechend oft durchlaufen, aber es wird nur der erste Wert „2“ in das zuerst festgelegte Datenfeld „9, 3“ geschrieben.
Wieso ist das so, und wie müsste das Sub aussehen, damit auch die anderen Werte entsprechend in der csv-Datei platziert werden?

Vielleicht gibt es auch noch eine andere Variante entsprechende Werte in bestehende CSV-Dateien zu schreiben?

Vielen Dank -Uwe

Sub test()
                       
                   
   
    Dim Datei As String
    Dim fso As New FileSystemObject
    Dim DateiName As String
    Dim BakName As String
    Dim Quelle As TextStream
    Dim Ziel As TextStream
 
    Dim Zeile As String
    Dim Reihe As Long
    Dim ZielReihe As Long
    Dim Spalte As Long
    Dim ZielSpalte As Long
    Dim NeuerWert As Integer
    Dim Spalten As Variant
    Dim i As Long
    Dim g As Long
     
     
    For g = 2 To 12
 
      'Prüft ob eine bak vorhanden ist und wenn loescht sie dann------------
   
        Datei = "C:\Programme\AutoCAD 2002 Deu\ERG_VT_ID.bak"
        Set fso = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(Datei) Then
          Datei = "C:\Programme\AutoCAD 2002 Deu\ERG_VT_ID.bak"
          Set fso = CreateObject("Scripting.FileSystemObject")
        If fso.FileExists(Datei) Then
          fso.DeleteFile Datei, True
        End If
        End If
       
        DateiName = "C:\temp\ERG_VT_ID.csv"
        BakName = fso.GetBaseName(DateiName) & ".BAK"
        ZielReihe = g + 1
        ZielSpalte = 9
        NeuerWert = g
   
        fso.MoveFile DateiName, BakName
        Set Quelle = fso.OpenTextFile(BakName, ForReading)
        Set Ziel = fso.OpenTextFile(DateiName, ForWriting, True)
 
        While Not Quelle.AtEndOfStream
              Reihe = Reihe + 1
              Zeile = Quelle.ReadLine
            If Reihe = ZielReihe Then
              Spalten = Split(Zeile, ";")
              Spalten(ZielSpalte) = NeuerWert
              Ziel.WriteLine Join(Spalten, ";")
            Else
              Ziel.WriteLine Zeile
            End If
     
        Wend
 
   
    Ziel.Close
    Quelle.Close
   


  Next g

End Sub


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 25. Feb. 2007 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich

Hallo Uwe,

erstmal scheint mir das du da etwas mit den Dateien durcheinander bist. Wo soll denn das Ergebnis rein ?
Datei = "C:\Programme\AutoCAD 2002 Deu\ERG_VT_ID.bak
oder
DateiName = "C:\temp\ERG_VT_ID.csv"
Eigentlich kann das so nicht laufen.

Code:

        .......   
        ''Datei = "C:\Programme\AutoCAD 2002 Deu\ERG_VT_ID.bak"
        Set fso = CreateObject("Scripting.FileSystemObject")
        ''If fso.FileExists(Datei) Then
        ''  Datei = "C:\Programme\AutoCAD 2002 Deu\ERG_VT_ID.bak"
        ''  Set fso = CreateObject("Scripting.FileSystemObject")
        ''If fso.FileExists(Datei) Then
        ''  fso.DeleteFile Datei, True
        ''End If
        ''End If
       
        DateiName = "C:\temp\ERG_VT_ID.csv"
        BakName = fso.GetBaseName(DateiName) & ".BAK"
        ' Wenn es schon eine Bak gibt dann löschen
        If fso.FileExists(BakName) Then
          fso.deleteFile BakName, True
        end if
        ' Orginaldatei nach Bak Datei
        fso.MoveFile DateiName, BakName

        ZielReihe = g + 1
        ZielSpalte = 9
        NeuerWert = g
   
        Set Quelle = fso.OpenTextFile(BakName, ForReading)
        Set Ziel = fso.OpenTextFile(DateiName, ForWriting, True)
 
        While Not Quelle.AtEndOfStream
        ....



Wenn du jedoch eine komplette Spalte ändern willst brauchst du nicht 12 mal die Datei löschen, kopieren, lesen, schreiben ... sondern kannst das doch in einem Rutsch machen.

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


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 25. Feb. 2007 14:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stelli,

das Ergebnis soll in die „DateiName = "C:\temp\ERG_VT_ID.csv"“, die Bak-Datei ist mir eigentlich unwichtig.
Was jedoch wichtig ist, ist das die Zieldatei, also die CSV-Datei, mehrfach während des Programmablaufes beschrieben werden kann - geöffnet und geschlossen – nach / vor jeder neuen Schleife.
Z.B.: Datei öffnen, 3 Felder einer Spalte (je nach Schleifengröße) beschreiben, dann Datei speichern und schließen. Zu einem späteren Zeitpunkt ist der entsprechende Code wieder im Programm implementiert und es soll die CSV wieder beschrieben werden. Dann z.B. 5 andere Felder beschreiben, speichern und schließen. Die zuvor geschriebenen Datenfelder sollen erhalten bleiben.
Nach so etwas suche ich. Wenn Du mir da mit einem Code weiterhelfen könntest wäre das prima. Da wie gesagt immer nur der erste Wert der Schleife in das erste Feld geschrieben wir und dann ist Schluss.

Viele Grüße und Danke

Uwe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stagladasy
Mitglied
Ingenieur


Sehen Sie sich das Profil von Stagladasy an!   Senden Sie eine Private Message an Stagladasy  Schreiben Sie einen Gästebucheintrag für Stagladasy

Beiträge: 21
Registriert: 02.01.2007

erstellt am: 25. Feb. 2007 18:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Stelli,

habe da jetzt eine kleine Ewigkeit daran umhergebastelt mit Deinem letzten und mit meinem alten Code, aber er schreibt weiterhin ausschließlich nur den ersten Wert (in die .bak im AutoCAD Verzeichnis als auch in der .csv unter Temp). Die Schleife wird zwar ordentlich durchlaufen, aber das war auch schon alles. Irgendwie komm ich nicht weiter. Wäre für Hilfe dankbar.

Uwe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1526
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 27. Feb. 2007 21:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stagladasy 10 Unities + Antwort hilfreich


csv.zip

 
Hallo Uwe,

hab dir mal ein Beispiel gemacht wie ich es anfangen würde.
Hab mal ein paar Fehlerabfragen reingebaut, aber ein wenig musst du ja auch noch zu tun haben.

Code:

''' in ein Modul
Public mycsv As cls_CSV
Sub test()
    Dim i As Integer
   
    Set mycsv = New cls_CSV
    If Not mycsv.OpenFile("C:\TEMP\TEST.txt") Then
        MsgBox mycsv.ErrMessage
        Exit Sub
    End If
   
    For i = 2 To mycsv.Rows
        mycsv.SetValue i, 3, "TEST2"
    Next i

    If mycsv.UnSaved Then
       mycsv.SaveFile
    End If
End Sub

Sub mycsv_FileNotExist(Datei As String, Msg As String)
    Stop
End Sub

''' In ein Klassenmodul
''' Dieses muss den Namen CLS_CSV haben
Private Zeilen As Variant
Private Spalten As Variant
Private FSO As FileSystemObject
Private TextStream As TextStream
Private GeöffneteDatei As String

Public UnSaved As Boolean
Public ErrMessage As String
Public Rows As Long
Public Function OpenFile(Datei As String) As Boolean
    Dim Inhalt As String
    If FSO.FileExists(Datei) = False Then
        ErrMessage = Datei & " nicht gefunden"
        Exit Function
    End If
    ' Textdatei öffnen
    Set TextStream = FSO.OpenTextFile(Datei, ForReading)
    ' Textdatei lesen
    Inhalt = TextStream.ReadAll
    ' In Zeilen abfüllen
    Zeilen = Split(Inhalt, vbCrLf)
    TextStream.Close
    ' Zeilen ermitteln
    Rows = UBound(Zeilen)
    ' Dateiname merken
    GeöffneteDatei = Datei
    UnSaved = False
    OpenFile = True
End Function

Public Function SetValue(ByVal Row As Long, ByVal Col As Long, ByVal Value As String) As Boolean
    ' Zeilen und Spalten sin 0 basierte Arrays
    Spalten = Split(Zeilen(Row - 1), ";")
    If Row > UBound(Zeilen) + 1 Then
       ' Alternativ können jetzt aber auch Zeilen angelegt werden
       ' um die Datei zu erweitern
       ErrMessage = "Zeilenangabe ungültig"
       Exit Function
    End If
    If Row < 1 Then
       ErrMessage = "Nur Zeilen grösser 0 erlaubt!"
       Exit Function
    End If
   
    If Col > UBound(Spalten) + 1 Then
       ErrMessage = "Spaltenangeb zu groß"
       Exit Function
    End If
    ' Werte vergleichen
    If Spalten(Col - 1) <> Value Then
        UnSaved = True
    End If
    ' Wert in die Spalte
    Spalten(Col - 1) = Value
    ' Wieder zur Zeile bauen
    Zeilen(Row - 1) = Join(Spalten, ";")
   
    SetValue = True
End Function

Public Function SaveFile(Optional Datei As String) As Boolean
    If IsMissing(Datei) = True Or Datei = "" Then
        Datei = GeöffneteDatei
    End If
    If Datei = "" Then
       ' Keine Angabe. Speichern nich möglich
       Exit Function
    End If
      
    Set TextStream = FSO.OpenTextFile(Datei, ForWriting, True)
    ' Inhalt zusammenbauen
    Inhalt = Join(Zeilen, vbCrLf)
    TextStream.Write Inhalt
    TextStream.Close
    UnSaved = False

End Function

Private Sub Class_Initialize()
    Set FSO = New FileSystemObject
End Sub


Stelli

PS: den Verweis auf Scipting Runtime nicht vergessen 
------------------
Warum lisp'eln wenn's auch anders geht. 
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz