【发布时间】:2019-03-13 14:35:39
【问题描述】:
我正在尝试通过目录解析 .txt 文件(这部分没问题)。 这些文件是报告并包含序列号列表,我也成功检索到好的列表。 每个文件包含许多序列号和一个日期,我想构建一个数组,其中第一列是序列号,第二列是重复日期,这就是我失败的地方。 如何为所有连续剧重复此日期并将其排列在 CSV 文件中?
要解析的文件示例:文件名:[Calibrage - Vérification][Sonde T Cryo][17-01-2019 14h51mn24].txt
Début de <<Calibrage / Vérification>>, <<Sonde T Cryo>> Le 17-01-2019 14h51mn24
******************************************************************************
** Conditions de mesures **
******************************************************************************
Nom de l'opérateur : AF
Condition de mesures :
Température : 21°C
Hygrométrie : 40%HR
Préssion atmosphérique : 980 HPA
Commentaire : NIM F85 / NIM F317 / NIM F100 / NOUVELLES SONDES NUMT 3M. 12199
Période de mesure = 15s
Nombre de point de mesure = 5
******************************************************************************
** Mesure Sonde en mode VERIFICATION (Moyenne) **
******************************************************************************
Mesure Brut Moyenne
Palier 1 (17-01-2019 23h51mn24)
Sonde 01 -18,263 -18,263 -18,263 -18,293 -18,263 -18,269
Sonde 02 -18,351 -18,361 -18,371 -18,341 -18,351 -18,355
Sonde 03 -18,336 -18,336 -18,326 -18,346 -18,336 -18,336
Sonde 05 -18,357 -18,357 -18,357 -18,357 -18,337 -18,353
******************************************************************************
** Contrôle d’anomalie de la mesure **
** Ecart max toléré entre la sonde et la Ref est de +-10°C **
******************************************************************************
Aucune anomalie constatée
******************************************************************************
** Les appareils ci-dessous sont Calibrés Et Vérifiés. **
******************************************************************************
Le seuil de tolerance est : +/- 0,2°C
Sonde n°01 [ AE190150013] Sonde n°02 [ AE190150014]
Sonde n°03 [ AE190150017] Sonde n°05 [ AE190150018]
Sonde n°06 [ AE190150015] Sonde n°07 [ AE190150020]
Sonde n°08 [ AE190150012] Sonde n°09 [ AE190150016]
Sonde n°10 [ AE190150011] Sonde n°11 [ AE190150019]
Sonde n°20 [ AE190150001] Sonde n°21 [ AE190150002]
******************************************************************************
** Les appareils ci-dessous n'ont pas passés le test de calibrage. **
******************************************************************************
Sonde n°04 [ ] Sonde n°22 [ ]
Sonde n°23 [ ] Sonde n°24 [ ]
Sonde n°25 [ ] Sonde n°26 [ ]
Sonde n°27 [ ] Sonde n°28 [ ]
Sonde n°29 [ ] Sonde n°30 [ ]
Sonde n°31 [ ] Sonde n°32 [ ]
Fin de <<Calibrage / Vérification>>, <<Sonde T Cryo>> Le 18-01-2019 04h52mn54
我想得到的是: 第一行的日期 并且只有“Les appareils ci-dessous sont Calibrés Et Vérifiés.”和“Les appareils ci-dessous n'ont pas passés le test de calibrage”之间的连续剧。
$data = 'C:\Users\user\Desktop\DEV\2019\2019_01 Janvier\*.txt'
[char[]]$replace = '!@#$%^&*(){}[]":;,<>/|\+=`~ '''
$regex = ($replace | % {[regex]::Escape($_)}) -join '|'
Get-ChildItem $data -recurse |
Where-Object { $_.Name -match $RegEx} |
Rename-Item -NewName {$_.Name -replace $RegEx, '_'}
(Get-ChildItem $data -recurse).FullName |
Foreach-Object {
(Get-Content $_ -Raw).
Replace('** Les appareils ci-dessous sont Calibrés Et Vérifiés. **','§').
Replace("Le seuil de tolerance est:+/-0,2°C",' ').
Replace("Leseuildetoleranceest:+/-0,2°C",'').
Replace("Le seuil de tolerance est:+/-0,3°C",' ').
Replace("Leseuildetoleranceest:+/-0,3°C",'').
Replace("** Les appareils ci-dessous n'ont pas passés le test de calibrage. **",'§').
Replace('*','').
Replace('n°','').
Replace('Sonde','').
Replace(' ','').
Replace(' ','') |
Set-Content $_
}
$folders = 'C:\Users\user\Desktop\DEV\2019\2019_01 Janvier'
$files = Get-ChildItem -Path $Folders -Include *.txt -Force -Recurse
foreach ($File in $Files) {
Foreach ($FileContent in $File) {
$FileContent = Get-Content -Path $File
$date = [regex]::matches($File,'\d{2}-\d{2}-\d{4}').value
}
$serial_temp = $FileContent -ireplace "^[^\[]*\[\s*","" -ireplace "\s*\][^\[]*\[\s*","`r`n" -ireplace "\]"
$serial = [regex]::Matches($serial_temp, '§([^/)]+)§') |ForEach-Object { $_.Groups[1].Value }
[System.String]$Text = $serial
$Keys = $serial -ireplace "^[^\[]*\[\s*","" -ireplace "\s*\][^\[]*\[\s*","`r`n" -ireplace "\]"
Write-Host $Serial $date
}
【问题讨论】:
-
你需要
$Keys变量做什么? -
日期部分是文件名还是内容?
-
你说得对,其实并不需要......
-
日期是内容的一部分,我检索成功了
-
很奇怪,因为此时您正在使用 FileInfo 对象上的正则表达式来获取它,而不是您开始在下面的行中获取的文件的内容...不应该工作。
标签: powershell csv foreach