我這里有一個小情況,對你來說可能很簡單。背景關系:
我有 3 個檔案 : mobile.txt,contract.txt并且name.txt
所有檔案的格式都像每一行都應該參考其他檔案上的同一行...
例子:
- 手機.txt
0606060606
0607070707
0608080808
- 合同.txt
123654
456985
152364
- 名稱.txt
John Doe
Miss 1
Mister 2
我想要一個foreach類似的回圈在變數中逐行提取并創建表:
0606060606;123654;John Doe
0607070707;456985;Miss 1
0608080808;152364;Mister 2
當然,這對你來說真的很簡單。我只設法將整個檔案存盤到一個變數中,而不是創建表。
干杯。
uj5u.com熱心網友回復:
你用
$mobile_txt = @( Get-Content mobile.txt )
$contract_txt = @( Get-Content contract.txt )
$name_txt = @( Get-Content name.txt )
而不是硬編碼檔案:
$mobile_txt = @'
0606060606
0607070707
0608080808
'@ -split [System.Environment]::NewLine
$contract_txt = @'
123654
456985
152364
'@ -split [System.Environment]::NewLine
$name_txt = @'
John Doe
Miss 1
Mister 2
'@ -split [System.Environment]::NewLine
for ( $ii = 0;
$ii -lt ( ( $mobile_txt.Count,
$contract_txt.Count,
$name_txt.Count | Measure-Object -Minimum).Minimum);
$ii )
{
[PSCustomObject] @{
mobile = $mobile_txt[$ii];
contract = $contract_txt[$ii];
name = $name_txt[$ii]
};
}
結果:.\SO\70215879.ps1
mobile contract name
------ -------- ----
0606060606 123654 John Doe
0607070707 456985 Miss 1
0608080808 152364 Mister 2
uj5u.com熱心網友回復:
這些檔案的行數可能不同,在這種情況下很容易丟失資訊。
為了實作這一點,并為所有行創建輸出,但可能存在空欄位,您可以讀取檔案并從這些行創建哈希表。
$i = 0
$mobile = @{}
Get-Content -Path 'X:\mobile.txt' | ForEach-Object { $mobile[$i ] = $_ }
$i = 0
$contract = @{}
Get-Content -Path 'X:\contract.txt' | ForEach-Object { $contract[$i ] = $_ }
$i = 0
$name = @{}
Get-Content -Path 'X:\name.txt' | ForEach-Object { $name[$i ] = $_ }
# determine the maximum number of lines found in tthe input files
$maxItems = ($mobile.Count, $name.Count, $contract.Count | Measure-Object -Maximum).Maximum
# next, combine and output.
# this won't throw an exception if an item is not present
# in any of the files, but insert an empty field instead.
for ($i = 0; $i -lt $maxItems; $i ) {
output a line as shown in your question
'{0};{1};{2}' -f $mobile[$i], $contract[$i], $name[$i]
}
或者如果我可以建議,組合為object,稍后另存為 CSV 檔案
$result = for ($i = 0; $i -lt $maxItems; $i ) {
# output an object that gets collected in variable $result
[PsCustomObject]@{
Mobile = $mobile[$i]
Contract = $contract[$i]
Name = $name[$i]
}
}
# view on console
$result
# write to CSV file
$result | Export-Csv -Path 'X:\MobileCombined.csv' -Delimiter ';' -NoTypeInformation
uj5u.com熱心網友回復:
您好,這種方法可以正常作業,謝謝大家。
感謝您,我現在有一個包含 115 行的檔案:
0606060606;123654;John Doe
0607070707;456985;Miss 1
0608080808;152364;Mister 2
我有另一個包含此類內容的檔案:
Smart Pro 5h 3Go ;44,00
OCC-Remise sur Smart Pro 5h 3Go ;-17,60
Abonnement Options-accès international;00,00
Abonnement Options-Option Voyage;00,00
Abonnement Options-ILLIMITE INTRA CPTE;3,00
OCC-option illimité intra-compte offerte;-3,00
----------------------- Page 30----------------------
Smart Pro 5h 3Go ;44,00
OCC-Remise sur Smart Pro 5h 3Go ;-17,60
Abonnement Options-accès international;00,00
Abonnement Options-Option Voyage;00,00
Abonnement Options-ILLIMITE INTRA CPTE;3,00
OCC-option illimité intra-compte offerte;-3,00
----------------------- Page 31----------------------
Smart Pro 5h 3Go;44,00
OCC-Remise sur Smart Pro 5h 3Go ;-17,60
Abonnement Options-ILLIMITE INTRA CPTE;3,00
OCC-option illimité intra-compte offerte ;-3,00
----------------------- Page 32----------------------
現在我必須像這樣匹配它們:
檔案 1 的第 1 行被復制到分隔符之間的第一個內容檔案 1 的第
2 行被復制到分隔符之間的第二個內容
檔案 1 的第 3 行被復制到分隔符之間的第三個內容
分隔符可以是不同于頁碼的字串。
我希望在最終檔案中出現這種型別的輸出:
0606060606;123654;John Doe;Smart Pro 5h 3Go ;44,00
0606060606;123654;John Doe;OCC-Remise sur Smart Pro 5h 3Go ;-17,60
0606060606;123654;John Doe;Abonnement Options-accès international;00,00
0606060606;123654;John Doe;Abonnement Options-Option Voyage;00,00
0606060606;123654;John Doe;Abonnement Options-ILLIMITE INTRA CPTE;3,00
0606060606;123654;John Doe;OCC-option illimité intra-compte offerte;-3,00
0607070707;456985;Miss 1;Smart Pro 5h 3Go ;44,00
0607070707;456985;Miss 1;OCC-Remise sur Smart Pro 5h 3Go ;-17,60
0607070707;456985;Miss 1;Abonnement Options-accès international;00,00
0607070707;456985;Miss 1;Abonnement Options-Option Voyage;00,00
0607070707;456985;Miss 1;Abonnement Options-ILLIMITE INTRA CPTE;3,00
0607070707;456985;Miss 1;OCC-option illimité intra-compte offerte;-3,00
0608080808;152364;Mister 2;Smart Pro 5h 3Go;44,00
0608080808;152364;Mister 2;OCC-Remise sur Smart Pro 5h 3Go ;-17,60
0608080808;152364;Mister 2;Abonnement Options-ILLIMITE INTRA CPTE;3,00
0608080808;152364;Mister 2;OCC-option illimité intra-compte offerte ;-3,00
我陷入了一個永無止境的回圈......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374233.html
