Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Wie CSV per Batch oder VBS in Fremdformat umwandeln ?!

Frage Entwicklung Batch & Shell

Mitglied: crashzero2000

crashzero2000 (Level 2) - Jetzt verbinden

29.06.2009, aktualisiert 14:13 Uhr, 7355 Aufrufe, 9 Kommentare

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.
Mitglied: bastla
29.06.2009 um 15:59 Uhr
Hallo crashzero2000 und willkommen im Forum!

Als VBScript etwa so:
01.
CSV = "D:\Datei.csv" 
02.
Neu = "D:\Datei.txt" 
03.
Delim = "|" 'Trennzeichen 
04.
L = Array(6,15,5,5,15,6) 'Feldlängen 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
Daten = Split(fso.OpenTextFile(CSV).ReadAll, vbCrLF) 
08.
 
09.
Set DateiNeu = fso.CreateTextFile(Neu, True) 
10.
U = UBound(Daten) 
11.
For i = 3 To U 'erste 3 Zeilen überspringen 
12.
    If Trim(Daten(i)) <> "" Then 'keine Leerzeilen verarbeiten 
13.
        Felder = Split(Daten(i), ";") 
14.
        Satz = Left(Felder(0), L(0)) 
15.
        For j = 1 To Ubound(Felder) 
16.
            Satz = Satz & Delim & Left(Felder(j), L(j)) 
17.
        Next 
18.
    End If 
19.
    If i < U Then 'nach letztem Datensatz keine Zeilenschaltung 
20.
        DateiNeu.WriteLine Satz 
21.
    Else 
22.
        DateiNeu.Write Satz 
23.
    End If 
24.
Next 
25.
DateiNeu.Close
Grüße
bastla
Bitte warten ..
Mitglied: crashzero2000
30.06.2009 um 12:14 Uhr
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 !!!!
Bitte warten ..
Mitglied: bastla
30.06.2009 um 13:12 Uhr
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
Bitte warten ..
Mitglied: crashzero2000
30.06.2009 um 13:24 Uhr
Genial - Super, funktioniert einwandfrei.

Du hast was gut bei mir ! Definitiv.

Mailkontakt ?
Bitte warten ..
Mitglied: bastla
30.06.2009 um 13:26 Uhr
Hallo crashzero2000!

Lass stecken - freut mich, wenn's funktioniert.

Grüße
bastla
Bitte warten ..
Mitglied: tendax
25.09.2009 um 05:03 Uhr
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
Bitte warten ..
Mitglied: bastla
25.09.2009 um 07:27 Uhr
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:
01.
@echo off & setlocal 
02.
set "Ein=D:\Telefonliste.csv" 
03.
set "Aus=D:\Telefonliste.ini" 
04.
set /a Kopfzeilen=1 
05.
 
06.
if exist "%Aus%" del "%Aus%" 
07.
set /a Nr=0 
08.
for /f "usebackq skip=%Kopfzeilen% tokens=1,2 delims=," %%i in ("%Ein%") do call :ProcessLine "%%i" "%%j" 
09.
goto :eof 
10.
 
11.
:ProcessLine 
12.
set /a Nr+=1 
13.
14.
    echo [%Nr%] 
15.
    echo AutoRe=0 
16.
    echo Bl=0 
17.
    echo Com= 
18.
    echo Custom=0 
19.
    echo FonAnn= 
20.
    echo FonDoAn=0 
21.
    echo FonDoIm=0 
22.
    echo FonNoRe=0 
23.
    echo Name=%~1 
24.
    echo NoPopup=0 
25.
    echo Number=%~2 
26.
    echo Run= 
27.
    echo Sound= 
28.
    echo Vip=0 
29.
    REM Leerzeile 
30.
    echo\ 
31.
)>>"%Aus%" 
32.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: tendax
25.09.2009 um 14:58 Uhr
@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
Bitte warten ..
Mitglied: bastla
25.09.2009 um 15:26 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Datum in einer CSV datei in Tage umwandeln (13)

Frage von nolle99 zum Thema Batch & Shell ...

Entwicklung
gelöst Mit Batch,VBS,Powershell Windows einrichten (1)

Frage von Justin98 zum Thema Entwicklung ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...