c# - 读取 csv 并将数据放入列表框中
问题描述
using System.IO;
namespace HW10
{
struct Employee
{
public string LastName;
public string FirstName;
public string IDNumber;
public string Department;
public string Position;
public string PayType;
public double HoursWorked;
public double PayRate;
}
public partial class frmPayroll : Form
{
//Create a list to hold the data from the input file
private List<Employee> EmployeeList = new List<Employee>();
public frmPayroll()
{
InitializeComponent();
}
private void frmPayroll_Load(object sender, EventArgs e)
{
}
private void btnOpen_Click(object sender, EventArgs e)
{
//Declare local variables
DialogResult ButtonClicked;
string InputRecord;
string[] InputFields;
Employee worker;
//Show the OpenFileDialog box for user to select file
openFileDialog1.InitialDirectory = Environment.CurrentDirectory;
openFileDialog1.FileName = "Payroll.csv";
ButtonClicked = openFileDialog1.ShowDialog();
if(ButtonClicked == DialogResult.Cancel)
{
MessageBox.Show("You did NOT select a file.");
return;
}
//Declare the streamreader variable to access the file
StreamReader inputFile = File.OpenText(openFileDialog1.FileName);
//Set up a loop to read every record, skipping the first record
InputRecord = inputFile.ReadLine();
while(!inputFile.EndOfStream)
{
InputRecord = inputFile.ReadLine();
InputFields = InputRecord.Split(',');
worker.LastName = InputFields[0];
worker.FirstName = InputFields[1];
worker.IDNumber = InputFields[2];
worker.Department = InputFields[3];
worker.Position = InputFields[4];
worker.PayType = InputFields[5];
worker.HoursWorked = double.Parse(InputFields[6]);
worker.PayRate = double.Parse(InputFields[7]);
//Add this worker struc to the list declared above
EmployeeList.Add(worker);
//Display the name in the Listbox on the form
listPayroll.Items.Add(worker.LastName + "," + worker.FirstName);
}
//Close the input file
inputFile.Close();
btnOpen.Enabled = false;
}
private void btnCompute_Click(object sender, EventArgs e)
{
listPayroll.Items.Clear();
string DisplayHeader = String.Format("{0,-18}{1,14}{2,11}{3,13}",
"Employee", "HoursWorked", "PayRate", "Gross Pay");
listPayroll.Items.Add(DisplayHeader);
DisplayHeader = String.Format("{0,-18}{1,14}{2,11}{3,13}",
"Employee", "HoursWorked", "PayRate", "Gross Pay");
listPayroll.Items.Add(DisplayHeader);
foreach (Employee emp in EmployeeList)
{
double HoursWorked = 0.0;
double PayRate = 0.0;
double GrossPay = 0.0;
// Check for Salary or Hourly
if(emp.PayType == "Hourly")
{
if(emp.HoursWorked > 40.0)
{
PayRate = emp.PayRate * (emp.HoursWorked - 40.0);
HoursWorked = emp.PayRate * 40.0;
}
else
{
PayRate = 0.0;
HoursWorked = emp.PayRate * emp.HoursWorked;
}
}
else //Salary paytype. No ot. Just striaght pay for 40 hrs
{
PayRate = 0.0;
HoursWorked = emp.PayRate * 40.0;
}
GrossPay = HoursWorked + PayRate;
//Display this data in the listbox
string DisplayPayroll = String.Format("{0,-18}{1,14:c}{2,11:C{3,13:c}",
emp.FirstName + " " + emp.LastName,
HoursWorked, PayRate, GrossPay);
listPayroll.Items.Add(DisplayPayroll);
}
}
private void btnExit_Click(object sender, EventArgs e)
{
// This method closes the application
this.Close();
我在尝试将数据从 .csv 文件计算到列表框时遇到问题。它在“在列表框中显示此数据”代码块中引发异常未处理错误。我已将系统 IO 和我需要显示在列表框中的所有字符串/双精度。我确信这是一个非常简单的修复,但我是编码新手。任何帮助将不胜感激。
解决方案
使用 string.Split(',') 不足以处理 CSV 数据。CSV 数据可以包含包含逗号的字段:
https://en.wikipedia.org/wiki/Comma-separated_values
我建议使用 CSV 库来帮助解析文件。谷歌搜索“c# csv library”应该会给你很多选择。
推荐阅读
- date - 如何使用插入命令在配置单元中插入当前日期
- flutter - 如何为 ImageProvider 提供图像对象(颤振)
- vuex - 使用 vuex4 在 vue3 中进行状态管理失败 - 在代码和框中共享代码
- reactjs - 使用具有可选属性的联合类型作为 React 道具类型时如何获得正确的类型推断
- python - 如何在我的 Windows 命令提示符下设置 python 3.9?它显示一个错误 python not found
- macros - 有没有办法将函数转换为 Julia 中的表达式?
- php - PHP 注意:未定义的偏移量:0-3000
- javascript - 如何删除由多个子元素组成的主父元素?
- reactjs - 如何在js文件中单击按钮设置功能
- android - 反应本机地图Android标注不根据内容拉伸