CSV Datei in sequenzielle ASCII Datei convertieren

  • #1
O

OllyNet

Aktives Mitglied
Themenersteller
Dabei seit
03.03.2002
Beiträge
27
Reaktionspunkte
0
Ort
Lippe Detmold
Hallo,
kennt jemand ein Tool mit dem ich eine CSV Datei (a;b;c;d;e;f;g1;2;e; .....etc) umwandeln kann in eine Textdatei, in der die Werte sequenziell untereinander stehen:
a
d
c
d
e
f
g
1
2
e

etc

Danke für jeden Tip :-X
 
  • #2
Hi OllyNet,

möglich wäre das mit einem Makro aus Excel heraus.

als Csv-Datei öffnen
Serielle txt.Datei öffnen
Zelle für zelle abgrasen und mit crlf-getrennt in die serielle Text-datei schreiben

Kann man natürlich erweitern auf alle eines Verzeichnisses usw.

Interesse ?

Gruß Matjes :)
 
  • #3
Hi OllyNet,

dieser Excel-Makro sollte das gewünschte tun.

Gruß Matjes ;)

Code:
'*******************************************************************
Sub CsvAlsSeriellesTextfileSpeichern()
'*******************************************************************
 ->1.    Prüfung csv-file
 ->1.1   wenn nein -> Meldung -> Exit
 ->2.    beschriebenen Bereich der csv-Datei bestimmen
 ->2.1   erste/letzte beschriebene Spalte/Zeile
 ->2.2   wenn Blatt leer, Meldung -> Exit
 ->3.    Pfad und Dateinamen der aktiven Mappe (csv-Datei) bestimmen
 ->4.    Serielle Textdatei neu anlegen
 ->      (gleicher Pfad, Dateiname, Endung txt)
 ->4.1   Prüfen, ob file bereits existiert
 ->4.1.1 wenn ja, fragen auf Überschreiben
 ->4.1.1.1 nein -> Abbruch
 ->5.    Zellinhalt des beschriebenen Bereichs zeilenweise
 ->      in Textdatei schreiben, abschliessen mit Linefeed
 ->6.    Textdatei schliessen
 ->7.    Vollzug melden
 ->8.    Aufräumen
'*******************************************************************

  Dim wb As Workbook, ws As Worksheet
  Dim l_row_first As Long, l_row_last As Long, l_col_first As Long, l_col_last As Long
  Dim my_path As String, my_name As String, my_newname As String, my_file As String
  Dim ret As Integer, s As Long, z As Long
  
  
  Set wb = ActiveWorkbook
  Set ws = ActiveSheet
  
 ->1.    Prüfung csv-file
  If Right(ActiveWorkbook.Name, 4) <> .csv Then
 ->1.1   wenn nein -> Meldung -> Exit
    MsgBox (Aktive Datei keine cvs-Datei! & vbLf & Ende der Bearbeitung :-()
    Exit Sub
  End If
    
 ->2.    beschriebenen Bereich der csv-Datei bestimmen
 ->2.1   erste/letzte beschriebene Spalte/Zeile
 ->2.2   wenn Blatt leer, Meldung -> Exit
  If Not CSV_Matrix_bestimmen(ws, l_row_first, l_row_last, _
                                  l_col_first, l_col_last) Then
    MsgBox (Blatt enthält keinen Inhalt & vbLf & Ende der Bearbeitung :-()
    Exit Sub
  End If
 ->3.    Pfad und Dateinamen der aktiven Mappe (csv-Datei) bestimmen
  my_path = wb.Path
  my_name = wb.Name
 ->4.    Serielle Textdatei neu anlegen
 ->      (gleicher Pfad, Dateiname, Endung txt)
  my_newname = Left(my_name, Len(my_name) - Len(.cvs)) & .txt
 ->4.1   Prüfen, ob file bereits existiert
  my_file = Dir(my_path & Application.PathSeparator & my_newname)
  If my_file <>  Then
   ->4.1.1 wenn ja, fragen auf Überschreiben
    ret = MsgBox( _
      Das Textfile & vbLf & _
      my_path & Application.PathSeparator & my_newname & vbLf & _
      existiert bereits! & vbLf & vbLf & _
      Soll die datei überschrieben werden?, _
      vbQuestion + vbYesNo + vbDefaultButton2)
   ->4.1.1.1 nein -> Abbruch
    If ret <> vbYes Then
      GoTo Aufraeumen
    Else
      Kill my_path & Application.PathSeparator & my_newname
    End If
  End If

  Open my_path & Application.PathSeparator & my_newname For Output As #1
  
 ->5.    Zellinhalt des beschriebenen Bereichs zeilenweise
 ->      in Textdatei schreiben, abschliessen mit Linefeed
  For z = l_row_first To l_row_last
    For s = l_col_first To l_col_last
      Print #1, ws.Cells(z, s).Value
    Next
  Next
  
 ->6.    Textdatei schliessen
  Close #1
 ->7.    Vollzug melden
  MsgBox ( _
    my_path & Application.PathSeparator & my_name & vbLf & _
    wurde seriell in der Textdatei & vbLf & _
    my_path & Application.PathSeparator & my_newname & vbLf & _
    gespeichert.)
 ->8.    Aufräumen
Aufraeumen:
  Set ws = Nothing: Set wb = Nothing
End Sub
Function CSV_Matrix_bestimmen(ws As Worksheet, _
                              l_za As Long, l_ze As Long, _
                              l_spa As Long, l_spe As Long) As Boolean
  Dim l_max_row As Long, l_max_col As Long, x As Long
  Dim l_cols As Long, l_anz As Long
                              
 ->liefert die erste/letzte beschriebene Spalte/Zeile
 ->des Arbeitsblattes
 ->gibt FALSE zurück, wenn das Arbeitsblatt keinen Inhalt hat
  CSV_Matrix_bestimmen = True
  
 ->letzte Spalte bestimmen
  l_spe = ws.Cells.SpecialCells(xlCellTypeLastCell).Column
  If l_spe = 0 Then
    CSV_Matrix_bestimmen = False: Exit Function
  End If
  For x = l_spe To 1 Step -1
    If (1 < ws.Cells(ws.Rows.Count, x).End(xlUp).Row) Or _
       (ws.Cells(1, x).Value <> ) Then
      l_spe = x: Exit For
    End If
    l_spe = x
  Next
  
 ->letzte Zeile bestimmen
  l_ze = ws.Cells.SpecialCells(xlCellTypeLastCell).Row
  If l_ze = 0 Then
    CSV_Matrix_bestimmen = False: Exit Function
  End If
  For x = l_ze To 1 Step -1
    If (1 < ws.Cells(x, ws.Columns.Count).End(xlToLeft).Column) Or _
       (ws.Cells(x, 1).Value <> ) Then
      l_ze = x: Exit For
    End If
    l_ze = x
  Next
 ->Spalte=1, Zeile=1 und leere Zelle -> Blatt leer
  If l_ze = 1 And l_spe = 1 And ws.Cells(1, 1).Value =  Then
    CSV_Matrix_bestimmen = False: Exit Function
  End If
  
 ->erste Spalte bestimmen
  l_spa = 1
  For x = 1 To l_spe
    If (1 < ws.Cells(ws.Rows.Count, x).End(xlUp).Row) Or _
       (ws.Cells(1, x).Value <> ) Then
      l_spa = x: Exit For
    End If
    l_spa = x
  Next
  
 ->erste Zeile bestimmen
  l_za = 1
  For x = 1 To l_ze
    If (1 < ws.Cells(x, ws.Columns.Count).End(xlToLeft).Column) Or _
       (ws.Cells(x, 1).Value <> ) Then
      l_za = x: Exit For
    End If
    l_za = x
  Next

End Function
 
Thema:

CSV Datei in sequenzielle ASCII Datei convertieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben