2016-08-11 9 views
0

したがって、同じスタイルのリストされたコンテンツ(フォントID、フォントの定義、タイムスタンプ)を持つ2つのファイルがあります。私は新しいフォントの2番目のファイルを取って、フォントIDが一致する最初のファイルの行を置き換える--- powershell(大規模に簡単なデータベースはない)を使いたい。異なるテキストファイルの行に基づいて、テキストファイルの行をpowershellに置き換えます。

File2テキスト行= [FontIDA01] 5,5,5,5、randomtext、11/10/2001 は、[FontIDA01]が一致するFile1の行を置き換えて、5,5,5,5 6,6,6,6とその日の日付がその行に表示されます。

$content = Get-Content $fileSelected #(path chosen by user) 
$masterContent = Get-Content $masterContentPath #(hardcoded path) 
foreach($line in content) 
{ 
    $fontID = $line.SubString($startFontID, $endFontID)#this just sets font id = 23jkK instead of [23jkK] 
    foreach($masterLine in $masterContent) 
    { 
     if ($masterLine.Contains($fontID)) 
     { 
     $masterContent -replace $masterLine, $line where-Object{$_.Name -contains $fontID} | Set-Content $masterContent -raw 
     } 
    } 
} 

私も閉じていますか?

答えて

1

辞書に新たなデータを収集し、交換のためにそれを使用します。

# get new data in a dictionary 
$newData = @{} 
Get-Content 2.txt | %{ 
    $parts = $_ -split ' ' 
    $newData[$parts[0]] = @{numbers=$parts[1]; date=$parts[3]} 
} 

#patch original data using the new data dictionary 
Get-Content 1.txt | %{ 
    $parts = $_ -split ' ' 
    $id = $parts[0] 
    $new = $newData[$id] 
    if ($new) { 
     $id, $new.numbers, $parts[2], $new.date -join ' ' 
    } else { 
     $_ 
    } 
} | Out-File 3.txt -Encoding utf8 

このコードは、フィールドはスペースで区切られて想定しているので、それはケースではありません場合は、他の方法を使用する必要がありますSelect-Stringのような部分を抽出するか、または正規表現マッチング:if ($_ -match '(.+?) ([\d,]+) and so on') { $id = $matches[0] }をマッチさせます。

+0

初心者レベルの方は答えがありますか?あなたのコードが何をしているのか分かりません。 –

+0

実際、これはまさにあなたのコードについて考えたものです。私のコードが自明であると信じている愚かな私は...まあ、うまくいけば誰かがより良い答えを投稿します。それが助けになるなら、コードは '|'配管を使って各ファイルを1行ずつ処理します。 – wOxxOm

関連する問題