2016-08-11 3 views
0

그래서 같은 스타일의 목록에있는 콘텐츠 (글꼴 ID, 글꼴 정의 및 타임 스탬프)가있는 두 개의 파일이 있습니다. 필자는 새로운 글꼴 두번째 파일을 가져 와서 글꼴 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

사실, 이것은 귀하의 코드에 대해 정확히 생각한 것입니다. 나의 코드가 자명하다라고 믿는 바보 같은 me .... 잘, 누군가 희망을 갖고 더 좋은 대답을 게시 할 것이다. 도움이된다면, 코드는 파이핑을 사용하여 각 파일을 한 줄씩 처리합니다. – wOxxOm

관련 문제