crashzero2000
Goto Top

Wie CSV per Batch oder VBS in Fremdformat umwandeln ?!

Hallo, ich habe schon im Board die Artikel zur Umwandlung durchgeforstet, leider trifft keins mein Problem.Ich bin auch leider kein sehr guter Programmer und benötige da etwas Hilfestellung.

Ich habe eine Excel welche per Makro in eine CSV exportiert.
Format : CSV
Zeile 1-3 enthält Überschriften und müssen augeblendet werden
1: Langer Text;;;;;29.06.2009
2: Text1;Text2;Text3.;Text4;Text5;Text6
3: Text7;Text8;Text9.;Text10;Text11;Text12
Die CSV enthält 6 Spalten , die meisten mit Inhalt, einige können auch leer sein.
Zeilen & Spalten mit den wichtigen Informationen :
Text1;Text2;Text3[Auch mal mit Doppelpunkt];Text4[Auch mal mit Doppelpunkt];Text5;Text6

Ich benötige nun folgendes Format :
Zeile 1-3 : Weglassen
Datenzeilen : [Als Trennzeichen zwischen den Texten | chr$(124) - Pipe]
Text1 [6 Zeichen,Mehrzeichen abkappen]|Text2 [Max. 15 Zeichen,Mehrzeichen abkappen]|Text3[5 Zeichen,Mehrzeichen abkappen]|Text4[5 Zeichen,Mehrzeichen abkappen],Text5[15 Zeichen,Mehrzeichen abkappen]|Text6[6 Zeichen,Mehrzeichen abkappen]

Der Vorgang dann bis nichts mehr in den Datenzeilen steht [Da die Menge der Datenzeilen variabel ist-also auch länger bzw. kürzer sein kann].

Dazu kommt das eine Datei im allgmeinen erstellt werden soll welchen ich mir aber per Basic oder Batch verbinden kann :
TEXTBLOCK [Immer gleicher Inhalt]
DATENBLOCK [Variabel, siehe oben]
TEXTBLOCK [Immer gleicher Inhalt]
DATENBLOCK [Variabel, siehe oben]
TEXTBLOCK [Immer gleicher Inhalt]

Geht das ev. auch per VBS oder Batch ?
Nach Zusammenstellen der Gesamtdatei muß diese dann per FTP versendet werden.

Ich hoffe mir kann jemand helfen, die Scriptings die ich hier schon gesehen habe sind ja genial, bringen mich aber nicht wirklich weiter da mein Programmier-Know-How mir da nicht weiterhilft.

Content-Key: 119309

Url: https://administrator.de/contentid/119309

Printed on: April 16, 2024 at 12:04 o'clock

Member: bastla
bastla Jun 29, 2009 at 13:59:22 (UTC)
Goto Top
Hallo crashzero2000 und willkommen im Forum!

Als VBScript etwa so:
CSV = "D:\Datei.csv"  
Neu = "D:\Datei.txt"  
Delim = "|" 'Trennzeichen  
L = Array(6,15,5,5,15,6) 'Feldlängen  

Set fso = CreateObject("Scripting.FileSystemObject")  
Daten = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLF)

Set DateiNeu = fso.CreateTextFile(Neu, True)
U = UBound(Daten)
For i = 3 To U 'erste 3 Zeilen überspringen  
    If Trim(Daten(i)) <> "" Then 'keine Leerzeilen verarbeiten  
        Felder = Split(Daten(i), ";")  
        Satz = Left(Felder(0), L(0))
        For j = 1 To Ubound(Felder)
            Satz = Satz & Delim & Left(Felder(j), L(j))
        Next
    End If
    If i < U Then 'nach letztem Datensatz keine Zeilenschaltung  
        DateiNeu.WriteLine Satz
    Else
        DateiNeu.Write Satz
    End If
Next
DateiNeu.Close
Grüße
bastla
Member: crashzero2000
crashzero2000 Jun 30, 2009 at 10:14:25 (UTC)
Goto Top
Genial - Genau was ich brauchte - Einfach super - Ich Danke dir !!!!!!!!

Ein kleines Problem ist da noch, nicht weiter wild :

Die Datei sieht nun ungefähr so aus :

Text1|Text2|Text3|Text4|Text5|Text6
Tex|Text|Text|..... <- Problemzeile

Ich müßte die Pipes alle untereinander haben, so daß , egal [Deshalb die Feldgrößen] ob der Text auch kürzer ist oder länger, die Pipes direkt untereinander stehen [Leider]
Also so ....
Text1|Text2|Text3|Text4|Text5|Text6
Tex |Text |Text |.....

Wenn das noch klappt - Dann hast du wirklich was gut bei mir !!!!
Member: bastla
bastla Jun 30, 2009 at 11:12:29 (UTC)
Goto Top
Hallo crashzero2000!

Um mit Leerzeichen aufzufüllen, müsstest Du nur folgende Zeilen 14
Satz = Left(Felder(0) & Space(L(0)), L(0))
bzw 16
Satz = Satz & Delim & Left(Felder(j) & Space(L(j)), L(j))
verwenden.

Grüße
bastla
Member: crashzero2000
crashzero2000 Jun 30, 2009 at 11:24:28 (UTC)
Goto Top
Genial - Super, funktioniert einwandfrei.

Du hast was gut bei mir ! Definitiv.

Mailkontakt ?
Member: bastla
bastla Jun 30, 2009 at 11:26:57 (UTC)
Goto Top
Hallo crashzero2000!

Lass stecken - freut mich, wenn's funktioniert. face-smile

Grüße
bastla
Member: tendax
tendax Sep 25, 2009 at 03:03:01 (UTC)
Goto Top
Hallo, ich häng mich mal hier ran, ich bin auf der Suche nach nach einer änlichen kovertierung ich möchte ein Telefon liste (.csw mit Komma trennzeichen) in eine .inf (konvertieren). Ich such schon seid ner Woche nach einem Converter der mir das erledigt aber bisher hab ichs nur geschafft aus den Ursprungsdatensätzen eine .csv zu erzeugen. Vielleicht kennt ja jemand das Zielformat und kann mir einen Tip geben nach was für einen konverter ich da suchen muss.

Ausgangsformat:

Name , Telefonnummer
NameA , 040123456
NameB, 0405678910
NameC, 03012345
usw.

Zielformat:

[#0] <<< Fortlaufende Nummer
AutoRe=0 <<< immer gleich
Bl=0 <<< immer gleich
Com= <<< immer gleich
Custom=0 <<< immer gleich
FonAnn= <<< immer gleich
FonDoAn=0 <<< immer gleich
FonDoIm=0 <<< immer gleich
FonNoRe=0 <<< immer gleich
Name=NameA <<< Name aus der Spalte "NAME"
NoPopup=0 <<< immer gleich
Number=040123456 <<< Nummer aus der Spalte "Telefonnummer"
Run= <<< immer gleich
Sound= <<< immer gleich
Vip=0 <<< immer gleich

[#0] <<< Fortlaufende Nummer
AutoRe=0 <<< immer gleich
Bl=0 <<< immer gleich
Com= <<< immer gleich
Custom=0 <<< immer gleich
FonAnn= <<< immer gleich
FonDoAn=0 <<< immer gleich
FonDoIm=0 <<< immer gleich
FonNoRe=0 <<< immer gleich
Name=NameB <<< Name aus der Spalte "NAME"
NoPopup=0 <<< immer gleich
Number=0405678910 <<< Nummer aus der Spalte "Telefonnummer"
Run= <<< immer gleich
Sound= <<< immer gleich
Vip=0 <<< immer gleich

usw.

Wär super wenn da jemand einen Tip für mich hätte, sind fast 1500 Datensätze.

Gruß tendax
Member: bastla
bastla Sep 25, 2009 at 05:27:12 (UTC)
Goto Top
Hallo tendax und willkommen im Forum!
ich häng mich mal hier ran
Nicht die allerbeste Idee - mit einem eigenen Thread erreichst Du sicher eine wesentlich größere Anzahl an Lesern ...

... anyhow - versuch es mit dem folgenden Batch:
@echo off & setlocal
set "Ein=D:\Telefonliste.csv"  
set "Aus=D:\Telefonliste.ini"  
set /a Kopfzeilen=1

if exist "%Aus%" del "%Aus%"  
set /a Nr=0
for /f "usebackq skip=%Kopfzeilen% tokens=1,2 delims=," %%i in ("%Ein%") do call :ProcessLine "%%i" "%%j"  
goto :eof

:ProcessLine
set /a Nr+=1
(
    echo [%Nr%]
    echo AutoRe=0
    echo Bl=0
    echo Com=
    echo Custom=0
    echo FonAnn=
    echo FonDoAn=0
    echo FonDoIm=0
    echo FonNoRe=0
    echo Name=%~1
    echo NoPopup=0
    echo Number=%~2
    echo Run=
    echo Sound=
    echo Vip=0
    REM Leerzeile
    echo\
)>>"%Aus%"  
goto :eof
Grüße
bastla
Member: tendax
tendax Sep 25, 2009 at 12:58:25 (UTC)
Goto Top
@bastla jo ich weis das es so nicht die meisten hits gibt, aber ihc möchte auch nicht als erste Handlung das Forum unnötig zumüllen.

Erst mal ein großes Danke für das Script. Es funktioniert soweit ganz gut. Auf den ersten Blick sieht alles aus wie es soll. Leider stürzt das Programm ab sobald ich es starte. Nach langem suchen und rumprobieren habe ich herausgefunden woran es liegt:

Am ende jedes Datensatzes wird mit "REM Leerzeile" eine Leerzeile eingefügt. das Problem ist das in dieser Leerzeile auch ein Leerzeichen drin ist wenn ich dieses Leerzeichen rauslösche wird die .inf korrekt eingelesen.

Ich hab auch schon mal gegoogelt aber anscheinend ist das Einfügen von einer Leerzeile (ohne Leerzeichen) in ner Batch ein Problem. Gibts da vielleicht einen Trick?

Wenn du damit einverstanden bist dann würde ich das Script auch gerne irgendwo online stellen weil ich denke das, das script auch für andere hilfreich ist (ich lese damit eine Telefonliste in Moony ein kleines ISDN Telefontool ein). Schreibe natürlich gerne eine Copyrighthinweis oder änliches für dich rein wenn du möchtest!

Gruß

tendax
Member: bastla
bastla Sep 25, 2009 at 13:26:17 (UTC)
Goto Top
Hallo tendax!
Am ende jedes Datensatzes wird mit "REM Leerzeile" eine Leerzeile eingefügt.
Stimm so nicht - die Leerzeile wird durch
echo\
eingefügt (die "REM"-Zeile 29 hat rein informativen Character und kann auch gerne entfernt werden).

Sollte sich (was sich erfahrungsgemäß aufgrund der Forensoftware hier nicht ausschließen lässt) hinter dem "\" noch ein Leerzeichen befinden, dann ist die Leerzeile tatsächlich nicht leer - daher Zeile 30 dahingehend überprüfen (oder, wenn die Leerzeile nicht benötigt/gewünscht ist, gleich zusammen mit Zeile 29 entsorgen) ...
Wenn du damit einverstanden bist dann würde ich das Script auch gerne irgendwo online stellen weil ich denke das, das script auch für andere hilfreich ist (ich lese damit eine Telefonliste in Moony ein kleines ISDN Telefontool ein).
Nur zu ...
Schreibe natürlich gerne eine Copyrighthinweis oder änliches für dich rein wenn du möchtest!
Nicht nötig.

Grüße
bastla