Вот пример файла .txt с разделителями табуляции в начале:
CH00-03 CH00-04 CH00-06 CH00-07 CH00-08
°F °F °F °F °F
1.1120e+002 1.0040e+002 4.0208e+002 4.4312e+002 4.5428e+002
2.3378e+002 2.3810e+002 2.4386e+002 2.5376e+002 4.1126e+002
2.6726e+002 2.5970e+002 2.5790e+002 2.5880e+002 2.6294e+002
-5.8662e+003 -5.8662e+003 -5.8662e+003 -5.8662e+003 -5.8662e+003
Я запускаю этот код, чтобы изменить его на CSV, удалив E +:
$DataPath = 'C:\Test'
$DataName = '\*.txt'
$DataTemp = '\Tempfile.csv'
$NewData = '\Complete.csv'
$DataStream = $DataPath + $DataName
$TempStream = $Datapath + $DataTemp
$NewStream = $DataPath + $NewData
#$DataContent = $DataName
$DataContent = Get-Content -Path "$DataStream" -Raw
$Data1 = $DataContent -replace '[E+]',''
$Data2 = $Data1 #Required as for some reason no data comes out if not passed through another variable.
ECHO $Data2 > $TempStream
IMPORT-CSV -Delimiter "`t" -Header ('Column1','Column2','Column3','Column4','Column5') -Path $TempStream | Export-Csv $NewStream -NoType
, то я брал данные из $ NewStream, чтобы умножить их на 100 или 1000 в зависимости от последнего di git после удаления E +
в тот момент, когда я пытаюсь заставить умножение работать, прежде чем выбирать на что следует умножать, вот несколько ошибок проб и ошибок:
- тест для разделения данных и цифр.
$import = get-content $NewStream
$import | select -First 3 | Set-Content $Header
$import | Select-Object -Skip 3 | Set-Content $CSVOUT
$NewImport = Get-Content $CSVOUT
пробовал, не уверен, близко это или нет.
$NewStream | foreach-object {$_ * 100} | Set-Content "C:\Test\Testing6.csv"
пробовал это, однако я чувствую, что это не может работать с тем, что у меня по какой-то причине
$arr = $DataContent
for($i = 0; $i -lt $arr.Length; $i++){
$arr[$i] = $arr[$i] * 100
}
ECHO $arr > "C:\Test\Testing6.csv"
также пробовал с этим
$arr = $DataContent2
for($i = 0; $i -lt $arr.Length; $i++){
$arr[$i] = [float]$arr[$i] *= 100
ECHO $arr > "C:\Test\Testing6.csv"
}
$ NewStream выглядит так:
Column1,Column2,Column3,Column4,Column5
CH00-03,CH00-04,CH00-06,CH00-07,CH00-08
°F,°F,°F,°F,°F
1.1120002,1.0040002,4.0208002,4.4312002,4.5428002
2.3378002,2.3810002,2.4386002,2.5376002,4.1126002
2.6726002,2.5970002,2.5790002,2.5880002,2.6294002
-5.8662003,-5.8662003,-5.8662003,-5.8662003,-5.8662003
Я пытаюсь умножить все это на 100 или 1000 на основе последнего числа на число, но просто всегда сталкиваюсь с разными ошибками, независимо от того, что я пытаюсь.
Думаю, я сделал это намного сложнее, чем нужно, пожалуйста, помогите, если бы это все работало правильно. Я также открыт для других windows языков программирования:)
РЕДАКТИРОВАТЬ: Спасибо, Матиас, ты получил мне все остальное, что мне нужно для завершения sh сценария. Кажется, что "t" не работает, однако, как показано ниже, я нашел способ поработать с ним.
Вот конечный результат, который у меня работает:
#Setup to easily change Data Path.
$DataPath = 'C:\Test'
$DataName = '\*.txt'
$DataTemp = '\Tempfile.csv'
$NewData = '\Complete.csv'
$FinalData = '\Final.csv'
#Path Concatenation.
$DataStream = $DataPath + $DataName
$TempStream = $Datapath + $DataTemp
$NewStream = $DataPath + $NewData
$OUTCSV = $DataPath + $FinalData
#Getting Content
$DataContent1 = Get-Content -Path "$DataStream" -Raw
#Because Get-Content does not work when introduced into IMPORT-CSV directly as a variable it needs a file changed to csv. all other ways would give me dupe header errors.
$DataContent1 > $TempStream
#Because "`t" does not work in Convertfrom-csv or Convertto-csv. Also because of Dupe header errors, this helps the most in eliminating them.
IMPORT-CSV -Delimiter "`t" -Header ('Column1','Column2','Column3',
'Column4','Column5','Column6','Column7','Column8','Column9','Column10',
'Column11','Column12','Column13','Column14','Column15','Column16',
'Column17','Column18','Column19','Column20','Column21','Column22',
'Column23','Column24','Column25','Column26','Column27','Column28',
'Column29','Column30') -Path $TempStream | Export-Csv $NewStream -NoType
#Grabbing the new content.
$DataContent2 = Get-Content -Path "$NewStream" -Raw
#This is the Scientific Notation conversion to Decimal.
$DataContent2 = [regex]::Replace($DataContent2, '(-?\d+\.\d+e\+\d+)', {param($m) $m.Value -as [double]})
#This creates the File I needed:)
$DataContent2|ConvertFrom-Csv -delimiter ","|Export-Csv -Path $OUTCSV -NoTypeInformation
#To delete the CSV files used to build the Final CSV
DEL $TempStream
DEL $NewStream