3

私はそのように構成されたcsvを持っています:

PK,INV_AMT,DATE,INV_NAME,NOTE
1,123.44,634,asdfljk,TEST 12OING 06/01/2010 DATE: 04/10/2012
2,123.44,634,wet aaa,HI HOW ARE YOU 11.11 DATE: 01/01/2011
3,123.44,634,dfssdsdfRR,LOOK AT ME NOW….HI7&&& DATE: 06/11/1997
4,123.44,634,asdfsdgg,LOOK AT ME NOW….HI7&&& DATE: 03-21-2097
5,123.44,634,45746345,LOOK AT ME NOW….HI7&&& DATE: 02/18/2000

DATEpowershell を使用してメモ列の文字列「:」の後の日付を解析するにはどうすればよいですか?

たとえば、最初の行TEST 12OING 06/01/2010 DATE: 04/10/2012にはメモ列に文字列 " " があります。04/10/2012その行から' ' を解析する必要があります。

上記のような csv ファイルから読み取り、その日付を解析して csv ファイルの新しい列として追加できるようにしたいと考えています。

助けてくれてありがとう。

4

3 に答える 3

5

Note プロパティの値を分割し (デフォルトの区切り文字はスペース)、最後の要素 (-1) を選択して datetime オブジェクトにキャストします。最後に、オブジェクトをパイプライン ($_) に戻します。

Import-Csv test.csv | Foreach-Object { $_.Note = [datetime]$_.Note.Split()[-1]; $_}
于 2012-06-09T11:13:43.260 に答える
1

正規表現を使用する別の方法:

Get-Content in.csv |
# Perform a replace on each line with the DATE: pattern. For convenience,
# eliminate preceding whitespace.
Foreach-Object { $_ -replace "\s*DATE: (\d{1,2}[-/]\d{1,2}[-/]\d{2,4}).*",",`$1" } |
Set-Content out.csv

編集:日付以降の漂遊文字の削除に関するOPの質問に応えて更新されました。

于 2012-06-09T04:34:52.220 に答える
1

DATE: ##########セクションは最後にあり、それを独自のセクションに分割したいので、次のように置き換えるだけでDATE:機能し,ます。

# Open files for reading/writing line by line
$reader = New-Object System.IO.StreamReader("in.csv")
$writer = New-Object System.IO.StreamWriter("out.csv")

# Copy first line over, with an extra ",DATE"
$writer.WriteLine($reader.ReadLine() + ",DATE")

# Process lines until in.csv ends
while (($line = $reader.ReadLine()) -ne $null) {
    # Get index of last occurrence of "DATE: "
    $index = $line.LastIndexOf("DATE: ")

    # Replace last occurrence of "DATE: " with a comma
    $line = $line.Remove($index, 6).Insert($index, ',')

    # Write the modified line to the new file
    $writer.WriteLine($line)
}

# Close the file handles
$reader.Close()
$writer.Close()

の前に常にスペースがある場合は、の代わりにDATE:置き換える方が少し良いかもしれません。" DATE: ""DATE: "

于 2012-06-09T03:24:00.060 に答える