【C# CSV文件处理程序开发指南】

这是一个Windows平台的CSV文件处理程序,采用简洁直观的界面设计,主要功能包括CSV文件的读取、创建和持续写入操作。
在这里插入图片描述

1.界面元素说明

  • 开发工具:Visual Studio 2022(.NET Framework 4.7.2+)环境搭建参考博客:【VS2019安装+QT配置】
  • 核心类库System.Net.Sockets.UdpClient

1.1. 标题栏

  • 显示内容Form1
  • 位置:窗口顶部
  • 功能:显示应用程序名称

1.2. 主显示区域

  • 外观:大型白色矩形区域
  • 位置:界面中央
  • 功能:显示CSV文件内容或操作结果
    在这里插入图片描述

2.完整程序代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;

namespace C_sharp_CSV
{
    public partial class Form1 : Form
    {
        private string currentCsvFilePath = string.Empty;
        private bool isFirstWrite = true;

        public Form1()
        {
            InitializeComponent();
        }

        // 读取CSV文件
        private void read_csv_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog
            {
                Filter = "CSV文件 (*.csv)|*.csv|所有文件 (*.*)|*.*",
                Title = "选择CSV文件"
            };

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                currentCsvFilePath = openFileDialog.FileName;
                try
                {
                    richTextBoxData.Text = File.ReadAllText(openFileDialog.FileName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"读取错误: {ex.Message}", "错误", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        // 新建CSV文件
        private void save_csv_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog
            {
                Filter = "CSV文件 (*.csv)|*.csv|所有文件 (*.*)|*.*",
                Title = "保存CSV文件",
                DefaultExt = "csv"
            };

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    currentCsvFilePath = saveFileDialog.FileName;
                    isFirstWrite = true;
                    
                    List<double> dataList = GetInputData();
                    SaveDataAsCsv(dataList, true);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"保存错误: {ex.Message}", "错误", 
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        // 持续写入数据
        private void write_continue_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(currentCsvFilePath))
            {
                MessageBox.Show("请先创建CSV文件", "提示", 
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            try
            {
                List<double> dataList = GetInputData();
                SaveDataAsCsv(dataList);
            }
            catch (FormatException)
            {
                MessageBox.Show("请输入有效数值", "错误", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"写入错误: {ex.Message}", "错误", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        // 获取输入数据
        private List<double> GetInputData()
        {
            return new List<double>
            {
                double.Parse(textBoxData1.Text),
                double.Parse(textBoxData2.Text),
                double.Parse(textBoxData3.Text),
                double.Parse(textBoxData4.Text)
            };
        }

        // 保存数据到CSV
        private void SaveDataAsCsv(List<double> data, bool isSaveButtonClick = false)
        {
            try
            {
                if ((isSaveButtonClick || isFirstWrite) && !File.Exists(currentCsvFilePath))
                {
                    File.WriteAllText(currentCsvFilePath, "time,Value1,Value2,Value3,Value4\n");
                }

                File.AppendAllText(currentCsvFilePath, 
                    $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff},{data[0]},{data[1]},{data[2]},{data[3]}\n");

                isFirstWrite = false;
            }
            catch (Exception ex)
            {
                throw new Exception($"文件操作失败: {ex.Message}");
            }
        }
    }
}

3.功能说明

3.1. 核心功能

  • 读取CSV:打开并显示现有CSV文件内容
  • 新建CSV:创建新CSV文件并写入初始数据
  • 持续写入:向现有文件追加新数据

3.2. 关键技术点

  • 使用File类进行文件操作
  • 采用OpenFileDialogSaveFileDialog实现文件选择
  • 自动生成时间戳记录数据写入时间
  • 智能判断是否需要写入表头

3.使用教程

  1. 准备数据

    • 在四个输入框中输入数值数据
  2. 新建文件

    点击新建CSV
    选择保存位置
    自动写入表头
    保存第一条数据

在这里插入图片描述

  1. 持续写入

    • 修改输入框数值
    • 点击"持续写入"按钮追加数据
      在这里插入图片描述
  2. 读取文件

    • 点击"读取.csv"查看已有文件内容
      在这里插入图片描述

扩展建议

  1. 数据验证

    // 示例:增强数据验证
    if(!double.TryParse(textBox1.Text, out double value))
    {
        MessageBox.Show("请输入有效数字");
        return;
    }
    
  2. 界面优化:
    • 添加数据表格显示

    • 实现实时数据可视化

  3. 性能优化:
    • 对于大数据量采用批量写入

    • 添加进度指示器

常见问题解答

Q: 为什么持续写入时需要先新建文件?
A: 程序需要知道文件保存位置,新建文件操作会设置文件路径。

Q: 时间戳格式可以修改吗?
A: 可以,修改SaveDataAsCsv方法中的日期格式字符串即可。

Q: 如何增加更多数据列?
A: 1. 添加更多输入框
2. 修改GetInputData方法
3. 更新表头字符串


提示:本程序适合传感器数据记录、实验数据采集等场景,可根据实际需求灵活调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2345VOR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值