私は、データベースに挿入する必要がある 1 日を通していくつかのファイルを生成する Linux サーバーを持っています。Puttyを使用して、SQL 2008を実行しているサーバーにそれらをsftpできます。問題はファイル自体の構造であり、異なる列に配置されるテキストの文字列がありますが、SQLへの一括挿入はそれをすべて入れようとします6 列ではなく 1 列に。Powershell は最良の方法ではないかもしれませんが、いくつかのサイトで、行末を見つけて置換または追加する方法を見てきました。数えて挿入できますか?
したがって、ファイルは次のようになります: '18240087A +17135555555 3333333333'、ここで 18、24、00、87、A は異なる列で、A と + の間に空白スペースがあります。これは文字数 10-19 です。別の列の場合、文字 20 ~ 30 は列、文字 31 ~ 36 は新しい列であるスペースなどです。だから私は「|」を挿入したい または ',' を使用して、SQL が列の終了位置を認識できるようにします。PowerShell がランダムにカウントすることは可能ですか?
これは、回答したすべての人に返信する方法ではない場合があります。事前にお詫び申し上げます。これは私にとって初めての PowerShell スクリプトであるため、皆様からのご意見をお待ちしております。これは、CDR レコードを生成している Avaya SIP サーバーです。後でレポートを作成するために、サーバーから取得して SQL に挿入する必要があります。エクスポートされたファイルは次のようになります。
10/15 18:47
18470214A +14434444444 3013777777 CME-SBC HHHH-CM 4 M00 0
最初は、最初の行を削除して、Kieranties の投稿から変更した出力に対してスクリプトを実行することを考えました。
$test = Get-Content C:\Share\CDR\testCDR.txt
$pattern = "^(.{2})(.{2})(.{1})(.{2})(.{1})(.{1})\s*(.{15}) (.{10})\s*(.{7})\s*(.{7})\s*(.{1})\s*(.{1})(.{1})(. {1})\s*(.*)$"
if($test -match $pattern){ $result = $matches.Values | select -first ($matches.Count-1)
[array]::Reverse($result, 0, $result.Length)
$result = $result -join "|"
$result | Out-File c:\Share\CDR\results1.txt
}
しかし、日付が含まれているため、最初の行が必要であることに気付きました。私はそれを別の方法で解決しようとすることができます。
また、次のように、ファイルに 2 行以上の CDR 情報が含まれている場合があることもわかりました。
10/15 18:24
18240087A +14434444444 3013777777 CME-SBC HRSA-CM 4 M00 0
18240096A +14434444445 3013777778 CME-SBC HRSA-CM 4 M00 0
私が作成した.ps1ファイルは2番目の文字列を与えないので、これを追加しようとしました:
foreach ($Data in $test) { $Data = $Data -split(',')
実行に失敗します。どうすれば複数の行 (およびおそらくその最初の行) を実行できますか? 役立つチュートリアルを知っている場合は、それも大歓迎です!