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

Text formatierung mit mehr als 31 Tokens

Frage Entwicklung Batch & Shell

Mitglied: dax4fun

dax4fun (Level 1) - Jetzt verbinden

13.09.2014, aktualisiert 20:08 Uhr, 1069 Aufrufe, 7 Kommentare, 1 Danke

Einen schönen guten Morgen wünsche ich,
suche nach einer Lösung für dieses Problem
.csv
01.
  
02.
2014-09-10 00:05:00.0000,2,749497002,1,2,501,2070,4141,2635,3623,2415,1981,301,2548,1621,2229,1485,4294,2760,1302,3513,4831,3220,2576,1656,3312,401,2898,1932,3680,2366,4732,3011,1102,2760,2341,1505,3011,1916,2635,702,"N",2014-09-10 01:55:02.0000 
03.
2014-09-10 00:10:00.....
soll zu formatiert werden
.sql
01.
UPDATE RESULTTABLE set 
02.
EVENTTIME='2014-09-10 00:05:00', 
03.
EVENTNUMBER=2, 
04.
FIRST=1, 
05.
SECOND=2, 
06.
GRODD_00=1200, 
07.
GRODD_01=1201, 
08.
......usw. 
09.
GRODD_55=4205, 
10.
TRANS_FLAG='N', 
11.
LAST_ACCESS='2014-09-10 01:55:02' 
12.
where EVENTTIME='2014-09-10 00:05:00';
wie kann ich die Zeichenkette erstellen, da mir bei der for Schleife die Tokens und Laufvariablen ausgehen.

habe leider kein Script da ich zum x mal von neu angefangen hab und immer wieder einen anderen Weg versuchte somit jetzt nur Müll im Ordner
Mit freundlichen Grüßen
dax
Mitglied: Lochkartenstanzer
13.09.2014, aktualisiert um 09:23 Uhr
Zitat von dax4fun:

2014-09-10 00:05:00.0000,2,749497002,1,2,501,2070,4141,2635,3623,2415,1981,301,2548,1621,2229,1485,4294,2760,1302,3513,4831,3220,2576,1656,3312,401,2898,1932,3680,2366,4732,3011,1102,2760,2341,1505,3011,1916,2635,702,"N",2014-09-10 01:55:02.0000

Sind die Zeilen immer gleich aufgebaut oder variiert die Anzahl der Werte in der Zeile?

wenn ja, dann kann ich Dir (g)awk empfehlen.

Tip:

echo "1,2,3" | gawk -F ","  ' {  print "p1 " $1 "\np2 " $2 "\np3 " $3 "\n" } '
lks

PS: Man kann in gawk-Skripten auch Schleifen bauen, falls die Zeile variabel lang wäre.
Bitte warten ..
Mitglied: colinardo
13.09.2014, aktualisiert um 11:45 Uhr
Moin,
oder mit Powershell auch kein Hexenwerk. Da deine Quell-CSV nicht so ganz mit deinem gewünschten Output korreliert (z.B. Anzahl der GRODD Werte etc), habe ich es mal an die CSV-Daten angepasst, hoffe die Zuordnung ist OK ?!.
01.
$header = (1..43) -join "," 
02.
$result = @() 
03.
$csv = Import-Csv "C:\input.csv" -delimiter "," -Header $header 
04.
$csv | %{ 
05.
 $result += 'UPDATE RESULTTABLE set' 
06.
 $result += "EVENTTIME='$(($_.1).Split(".")[0])'," 
07.
 $result += "EVENTNUMBER=$($_.2)," 
08.
 $result += "FIRST=$($_.3)," 
09.
 $result += "SECOND=$($_.4)," 
10.
 0..35 | %{ 
11.
  $result += "GRODD_$(("0$_").Substring(1))=$($_.($_ + 5))," 
12.
13.
$result += "TRANS_FLAG='$($_.42)'," 
14.
$result += "LAST_ACCESS='$(($_.43).Split(".")[0])'" 
15.
 $result += "where EVENTTIME='$(($_.1).Split(".")[0])';" 
16.
17.
$result | Set-Content "c:\output.sql"
ob die Zuordnung der Spalten jetzt so stimmt musst du selber überprüfen.

Grüße Uwe
Bitte warten ..
Mitglied: rubberman
13.09.2014 um 14:31 Uhr
Hallo.

Mit Batch pur etwa so.
01.
@echo off &setlocal EnableDelayedExpansion 
02.
>"C:\output.sql" ( 
03.
  for /f "usebackq tokens=1-5* delims=," %%g in ("C:\input.csv") do ( 
04.
    echo UPDATE RESULTTABLE set 
05.
    for /f "delims=." %%m in ("%%g") do ( 
06.
      echo EVENTTIME='%%m', 
07.
      set "eventtime=%%m" 
08.
09.
    echo EVENTNUMBER=%%h, 
10.
    echo FIRST=%%j, 
11.
    echo SECOND=%%k, 
12.
    set "line=%%l" 
13.
    for /l %%m in (100 1 135) do ( 
14.
      for /f "tokens=1* delims=," %%n in ("!line!") do ( 
15.
        set "c=%%m" 
16.
        echo GRODD_!c:~-2!=%%n, 
17.
        set "line=%%o" 
18.
19.
20.
    for /f "tokens=1,2 delims=," %%m in ("!line!") do ( 
21.
      echo TRANS_FLAG='%%m', 
22.
      for /f "delims=." %%o in ("%%n") do ( 
23.
        echo LAST_ACCESS='%%o' 
24.
25.
26.
    echo where EVENTTIME='!eventtime!'; 
27.
28.
)
Auch hier vorausgesetzt dass "GRODD_55" ein Schreibfehler war, da dein Beispiel nur 36 Werte beinhaltet.

Grüße
rubberman
Bitte warten ..
Mitglied: dax4fun
13.09.2014, aktualisiert um 18:02 Uhr
einen wunderschönen guten Tag,

ja mein Fehler GRODD_55 ist kein Schreibfehler es ist folgendes und es ist xp (powershell ??)
01.
 
02.
UPDATE RESULTTABLE set 
03.
EVENTTIME='2014-09-10 00:05:00', 
04.
EVENTNUMBER=2, 
05.
FIRST=1, 
06.
SECOND=2, 
07.
GRODD_00=1234, 
08.
GRODD_01=1342, 
09.
GRODD_02=2234, 
10.
GRODD_03=1234, 
11.
GRODD_04=1234, 
12.
GRODD_05=1234, 
13.
GRODD_10=1234, 
14.
GRODD_11=1234, 
15.
GRODD_12=1234, 
16.
GRODD_13=1234, 
17.
GRODD_14=1234, 
18.
GRODD_15=1234, 
19.
GRODD_20=1234, 
20.
GRODD_21=1234, 
21.
GRODD_22=1234, 
22.
GRODD_23=1234, 
23.
GRODD_24=1234, 
24.
GRODD_25=1234, 
25.
GRODD_30=1234, 
26.
GRODD_31=1234, 
27.
GRODD_32=1234, 
28.
GRODD_33=1234, 
29.
GRODD_34=1234, 
30.
GRODD_35=1234, 
31.
GRODD_40=1234, 
32.
GRODD_41=1234, 
33.
GRODD_42=1234, 
34.
GRODD_43=1234, 
35.
GRODD_44=1234, 
36.
GRODD_45=1234, 
37.
GRODD_50=1234, 
38.
GRODD_51=1234, 
39.
GRODD_52=1234, 
40.
GRODD_53=1234, 
41.
GRODD_54=1234, 
42.
GRODD_55=1234, 
43.
TRANS_FLAG='N', 
44.
LAST_ACCESS='2014-09-10 01:55:02' 
45.
where EVENTTIME='2014-09-10 00:05:00';
1234 sind natürlich nur zufällige platzhalter
ich hab das nicht gepostet da ich dachte es ist ein einfacher Weg wenn z.B. eine Maske aus einer Datei verwendet wird
01.
.csv 
02.
2014-09-10 00:10:00..... 
03.
maske.txt 
04.
UPDATE RESULTTABLE set 
05.
EVENTTIME=, 
06.
EVENTNUMBER=, 
07.
FIRST=, 
08.
SECOND=, 
09.
.sql 
10.
UPDATE RESULTTABLE set 
11.
EVENTTIME=2014-09-10 00:10:00, 
12.
EVENTNUMBER=2, 
13.
FIRST=1, 
14.
SECOND=2,... 
15.
.csv ---> maske.txt --->.sql
@Lochkartenstanzer
werd ich mir anschauen da ich die csv mit fsql bekomme und dann mit isql wieder einfüge
hab etliche Programme gefunden aber fast bei keinen kann ich ein export wieder importieren als (update).
Mit freundlichen Grüßen
dax
Bitte warten ..
Mitglied: rubberman
LÖSUNG 13.09.2014, aktualisiert um 20:08 Uhr
Hallo dax4fun.

ja mein Fehler GRODD_55 ist kein Schreibfehler es ist folgendes und es ist xp (powershell ??)
Bahnhof ohne Punkt und Komma

Finden sich denn nun immer 56 Werte in einer Zeile (neben Datum & Co.) oder kann die Anzahl variieren?

Grüße
rubberman
Bitte warten ..
Mitglied: dax4fun
13.09.2014, aktualisiert um 20:13 Uhr
@rubberman
tut mir leid, daran sieht man wie ich das handhabe "es wird schon irgendwie gehen" was fatat ist beim programmieren,

ich hoffe ich werde eine zweite csv auch damit umbasteln können, soll ja auch was davon haben ;)

Danke das erste script hab ich getestet es gibt die GRODD_00 bis 35 aus und schaut gut aus bis auf halt meine fehlende Angabe
UPDATE:
funktioniert super !! hab halt einfach die Schleife für den jeweiligen Bereich mehrfach kopiert
for /l %%m in (105 1 110) do (........................for /l %%m in (110 1 115) do ( usw......
for /f "tokens=1* delims=," %%n in ("!line!") do (
set "c=%%m"
echo GRODD_!c:~-2!=%%n,
set "line=%%o"
)
)

ich sehe jetzt was ich machen würde .....verzweifelt for /l %%m in (00 1 10) do ( herumprobieren

Danke
dax
Bitte warten ..
Mitglied: colinardo
14.09.2014, aktualisiert um 12:30 Uhr
Zitat von dax4fun:
es ist xp (powershell ??)
kein Thema, auch unter XP läuft die Powershell(2.0)
Windows Management Framework (Windows PowerShell 2.0, WinRM 2.0 und BITS 4.0)

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Microsoft Office
gelöst Wie kann man die Standard-Schriftart bei einfügen von Text in Word 2013 festlegen? (3)

Frage von Rene1976 zum Thema Microsoft Office ...

VB for Applications
gelöst VBA Text mit Format übertragen und Zeichen ergänzen (11)

Frage von Dau12345 zum Thema VB for Applications ...

Outlook & Mail
gelöst Emails werden ohne Signatur und Text versendet - Outlook 2010 (11)

Frage von IT-com zum Thema Outlook & Mail ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...