我一直在从student_data.dat抓取文件数据,并尝试将其显示为表格形式。
文件的前三行是这样写的:
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”等。稍后,我将处理数据以计算每个作业的类(class)平均水平以及到目前为止该类(class)的学生总体平均水平。设置表的每种方法都会导致文件显示为:@{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
}
}
但是发生了错误。 最佳答案
首先,请注意,如果您使用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 "," -NoTypeInformation
关于powershell - 使用Powershell脚本无法以表格形式显示文件数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64542793/