E=mc2
asked on
Further modification to the current Powershell script
Modification to a script needs to be made to adjust to these changes in the source data.
Where the PO number is:
G50*N*20140916*999999~ (the position of the PO number is represented by 999999)
Where the PO1 and the PID used to be, now this is showing:
G80*10*CA*15.22*1234567891 23*IN*1234 56~
G81*DESC~
The script to work with:
$InputFile = "C:\original.txt"
$OutputFile = "C:\New.txt"
Function ParseText ($OutputFile,$InputFile){
Begin{
$line,$poline,$totline,$to tal,$i = $null,$null,$null,$null,0
Set-Content $OutputFile $null
$Data = Get-Content -Path $InputFile | ?{$_ -match "(G50\*)|(G81\*)|(G80\*{2} )|(EFG\*)" }
}
Process{
$Data | % {
#Check the end of data set
If ($_ -match "EFG\*"){
If($poline -ne $null -and $total -ne $null){
$Totline = "Total: `$$Total"
Write-host "This is Total `$$total"
#Write the data collection to output file
"$poline$line`r`n$totline` r`n" | out-file $OutputFile -Encoding UTF8 -Append
#reset the variables
$line,$poline,$totline,$to tal,$i = $null,$null,$null,$null,0
}
}
#Collect the PO Number
If($_ -match "(G50\*)(\d{0,10})"){
$poline = "PONumber: $($Matches[2])"
}
#Collect G80 details and following G81 Description
If($_ -match "(G80\*{2})(\d{1,})\*(\w{1 ,})\*(\d{1 ,}(\.\d{1, })?)\*{2}( \w{1,})\*( \d{1,})"){
$i++
$total += [double]$Matches[2] * [double]$Matches[4]
$Desc = ($Data[([Array]::IndexOf($ Data,$_)+1 )] -split "\*\*\*\*|~")[1]
[String[]]$line += "`r`nItem $i`: UPC: $($Matches[7]), Desc: $Desc, Qty: $($Matches[2]) Price `$$($Matches[4])"
}
}
}
}
If(Test-Path $InputFile){
ParseText $OutputFile $InputFile
}
Desired type of output:
PONumber: 999999
Item 1: UPC: 12345678912345, Desc: information here, Qty: 248 Price: $10.00
Item 2: UPC: 23456789123452, Desc: information here, Qty: 329 Price: $1.00
Item 3: UPC: 98765432198765, Desc: information here, Qty: 20 Price $2.00
Total: $Calculated total
PONumber: 999985
Item 1: UPC: 12345678912345, Desc: information here, Qty: 250 Price: $10.00
Item 2: UPC: 23456789123452, Desc: information here, Qty: 200 Price: $1.00
Item 3: UPC: 98765432198765, Desc: information here, Qty: 100 Price $2.00
Total: $Calculated total
What changes need to be made to this script in order to produce the desired output?
Where the PO number is:
G50*N*20140916*999999~ (the position of the PO number is represented by 999999)
Where the PO1 and the PID used to be, now this is showing:
G80*10*CA*15.22*1234567891
G81*DESC~
The script to work with:
$InputFile = "C:\original.txt"
$OutputFile = "C:\New.txt"
Function ParseText ($OutputFile,$InputFile){
Begin{
$line,$poline,$totline,$to
Set-Content $OutputFile $null
$Data = Get-Content -Path $InputFile | ?{$_ -match "(G50\*)|(G81\*)|(G80\*{2}
}
Process{
$Data | % {
#Check the end of data set
If ($_ -match "EFG\*"){
If($poline -ne $null -and $total -ne $null){
$Totline = "Total: `$$Total"
Write-host "This is Total `$$total"
#Write the data collection to output file
"$poline$line`r`n$totline`
#reset the variables
$line,$poline,$totline,$to
}
}
#Collect the PO Number
If($_ -match "(G50\*)(\d{0,10})"){
$poline = "PONumber: $($Matches[2])"
}
#Collect G80 details and following G81 Description
If($_ -match "(G80\*{2})(\d{1,})\*(\w{1
$i++
$total += [double]$Matches[2] * [double]$Matches[4]
$Desc = ($Data[([Array]::IndexOf($
[String[]]$line += "`r`nItem $i`: UPC: $($Matches[7]), Desc: $Desc, Qty: $($Matches[2]) Price `$$($Matches[4])"
}
}
}
}
If(Test-Path $InputFile){
ParseText $OutputFile $InputFile
}
Desired type of output:
PONumber: 999999
Item 1: UPC: 12345678912345, Desc: information here, Qty: 248 Price: $10.00
Item 2: UPC: 23456789123452, Desc: information here, Qty: 329 Price: $1.00
Item 3: UPC: 98765432198765, Desc: information here, Qty: 20 Price $2.00
Total: $Calculated total
PONumber: 999985
Item 1: UPC: 12345678912345, Desc: information here, Qty: 250 Price: $10.00
Item 2: UPC: 23456789123452, Desc: information here, Qty: 200 Price: $1.00
Item 3: UPC: 98765432198765, Desc: information here, Qty: 100 Price $2.00
Total: $Calculated total
What changes need to be made to this script in order to produce the desired output?
ASKER
In this example it's: 123456789123
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
This almost works, except for where the PO number should appear, it's showing the quantity for the last item in my data, essentially duplicating the qty showing for item 2, and also showing it where the PO number is.
Sample output:
PONumber: 219
Item 1: UPC: 123456789123, Desc: DESC, Qty: 10 Price $15.21
Item 2: UPC: 123456789500, Desc: DESC 2, Qty: 219 Price $1.00
Total: $371.10
Sample output:
PONumber: 219
Item 1: UPC: 123456789123, Desc: DESC, Qty: 10 Price $15.21
Item 2: UPC: 123456789500, Desc: DESC 2, Qty: 219 Price $1.00
Total: $371.10
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
BTB, if you have too many such files to phrase, then I would suggest you open a question with all possible combinations of 'PO number, lines, PO1 lines, PID lines and the end of dataset. Then we can try to come up with a code which can deal with all these log files.
ASKER
Thanks .. I don't think I have to many more at this time, however I will keep this in mind for sure.
Ok.. No problem.. :-)
G80*10*CA*15.22*1234567891