我一直在从student_data.dat抓取文件数据,并尝试将其显示为表格形式。文件的前3行是这样写的:
Jamie Zawinski,78.8,81.0,77.3,80.0,80.0,77.0
Adam Douglas,86.2,69.0,77.8,81.0,87.5,88.0
Wallace Steven,66.2,68.0,91.3,78.6,80.3,86.4我希望将其设置为一个表,其中包含学生姓名、作业-1、作业-2等标题。稍后,我将处理这些数据,以计算每个作业的班级平均值和到目前为止课程中学生的总体平均值。设置表格的每种方法都会导致文件显示为:
@{Name=Jamie Zawinski; Assignment-1=78.8; Assignment-2=81.0; Assignment-3=77.3; Assignment-4=80.0;
Midterm_Exam=80.0; Final_Exam=77.0} @{Name=Adam Douglas; Assignment-1=86.2; Assignment-2=69.0;
Assignment-3=77.8; Assignment-4=81.0; Midterm_Exam=87.5; Final_Exam=88.0} @{Name=Wallace Steven;
Assignment-1=66.2; Assignment-2=68.0; Assignment-3=91.3; Assignment-4=78.6; Midterm_Exam=80.3;
Final_Exam=86.4}我的代码看起来像这样:
$file = Import-Csv C:\**real path**\student_data.dat -Delimiter ',' -Header 'Name', 'Assignment-1','Assignment-2','Assignment-3','Assignment-4','Midterm_Exam','Final_Exam'
Write-Host $file我尝试添加:
foreach ($line in $file){
$data += [pscustomobject]@{
Name = $line.name
Assignment-1 = $line.Assignment-1
Assignment-2 = $line.Assignment-2
}
}并改写:
$filedata = Get-Content ./student_data.dat
$newline = $filedata.Split("`n")
$newline.count
foreach ($l in $newline){
$Names = $l.Split(",")[0].Trim()
$Assignment-1 = $l.Split(",").Trim()
[pscustomObject]@{
Names = $Names;
Assignment-1 = $Assignment-1
}
}但是发生了错误。
发布于 2020-10-27 02:37:44
首先,请注意,如果使用Write-Output而不是Write-Host,您将获得更具可读性的输出,后者会尝试将整个输入推入单个字符串中。(或者干脆把它去掉,$file等同于Write-Output $file)
正如Matthias R.Jessen评论的那样,您可能正在寻找Format-Table命令:
$path = "C:\**real path**\student_data.dat"
$header = 'Name', 'Assignment-1','Assignment-2','Assignment-3','Assignment-4','Midterm_Exam','Final_Exam'
$data = Import-Csv $path -Delimiter ',' -Header $header
$data | Format-Table注意,这只是“漂亮地打印”要在控制台中显示的数据。数据不会改变,您不应该将其用于任何类型的文件输出。而且对于处理数据来说,这并不是真正必要的。一旦你完成了对数据的操作,你就可以将其导出回CSV:
$outpath = "C:\**real path**\student_data_result.csv"
$data | Export-Csv $outpath -Delimiter "," -NoTypeInformationhttps://stackoverflow.com/questions/64542793
复制相似问题