Text formatierung mit mehr als 31 Tokens
Einen schönen guten Morgen wünsche ich,
suche nach einer Lösung für dieses Problem
.csv
soll zu formatiert werden
.sql
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
suche nach einer Lösung für dieses Problem
.csv
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
2014-09-10 00:10:00.....
.sql
UPDATE RESULTTABLE set
EVENTTIME='2014-09-10 00:05:00',
EVENTNUMBER=2,
FIRST=1,
SECOND=2,
GRODD_00=1200,
GRODD_01=1201,
......usw.
GRODD_55=4205,
TRANS_FLAG='N',
LAST_ACCESS='2014-09-10 01:55:02'
where EVENTTIME='2014-09-10 00:05:00';
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 249116
Url: https://administrator.de/contentid/249116
Ausgedruckt am: 18.11.2024 um 07:11 Uhr
7 Kommentare
Neuester Kommentar
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.
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 ?!.
ob die Zuordnung der Spalten jetzt so stimmt musst du selber überprüfen.
Grüße Uwe
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 ?!.
$header = (1..43) -join ","
$result = @()
$csv = Import-Csv "C:\input.csv" -delimiter "," -Header $header
$csv | %{
$result += 'UPDATE RESULTTABLE set'
$result += "EVENTTIME='$(($_.1).Split("."))',"
$result += "EVENTNUMBER=$($_.2),"
$result += "FIRST=$($_.3),"
$result += "SECOND=$($_.4),"
0..35 | %{
$result += "GRODD_$(("0$_").Substring(1))=$($_.($_ + 5)),"
}
$result += "TRANS_FLAG='$($_.42)',"
$result += "LAST_ACCESS='$(($_.43).Split("."))'"
$result += "where EVENTTIME='$(($_.1).Split("."))';"
}
$result | Set-Content "c:\output.sql"
Grüße Uwe
Hallo.
Mit Batch pur etwa so.
Auch hier vorausgesetzt dass "GRODD_55" ein Schreibfehler war, da dein Beispiel nur 36 Werte beinhaltet.
Grüße
rubberman
Mit Batch pur etwa so.
@echo off &setlocal EnableDelayedExpansion
>"C:\output.sql" (
for /f "usebackq tokens=1-5* delims=," %%g in ("C:\input.csv") do (
echo UPDATE RESULTTABLE set
for /f "delims=." %%m in ("%%g") do (
echo EVENTTIME='%%m',
set "eventtime=%%m"
)
echo EVENTNUMBER=%%h,
echo FIRST=%%j,
echo SECOND=%%k,
set "line=%%l"
for /l %%m in (100 1 135) do (
for /f "tokens=1* delims=," %%n in ("!line!") do (
set "c=%%m"
echo GRODD_!c:~-2!=%%n,
set "line=%%o"
)
)
for /f "tokens=1,2 delims=," %%m in ("!line!") do (
echo TRANS_FLAG='%%m',
for /f "delims=." %%o in ("%%n") do (
echo LAST_ACCESS='%%o'
)
)
echo where EVENTTIME='!eventtime!';
)
)
Grüße
rubberman
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
Windows Management Framework (Windows PowerShell 2.0, WinRM 2.0 und BITS 4.0)
Grüße Uwe