下面的代码实际上做了我想要它做的事情,但是我正在努力使其达到最佳状态,并且由于我仍在学习 BackgroundWorker 等,我想你可以给我一些提示。问题是我可以运行该程序,但是因为它是一个相当长的操作(每个文本文件超过 1000 行),它只会在程序完成之前很好地更新进度条或标签。有 2 个进度条,一个用于处理的文本文件数,另一个用于处理过程中读取的文本文件的行数。
namespace myParser
{
public partial class Form1 : Form
{
string filePath;
string[] files;
public Form1()
{
InitializeComponent();
pbFilesProcessed.Visible = false;
pbLinesProcessed.Visible = false;
btnParse.Visible = false;
lbProcessedFiles.Visible = false;
lbProcessedLines.Visible = false;
}
private void btnOpen_Click(object sender, EventArgs e)
{
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
//counts the number of files in the folder
files = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
filePath = folderBrowserDialog1.SelectedPath.ToString();
char[] delimiterChars = { '\\' };
string[] filePathParts = filePath.Split(delimiterChars);
string folder = filePathParts[4];
tbFolderName.Text = folder;
btnParse.Visible = true;
}
}
private void btnParse_Click(object sender, EventArgs e)
{
btnParse.Visible = false;
lbProcessedFiles.Visible = true;
pbFilesProcessed.Visible = true;
lbProcessedLines.Visible = true;
pbLinesProcessed.Visible = true;
lbProcessedLines.Text = "Lines: 0 / 0";
int fileCount = 1;
foreach (var csvFile in Directory.GetFiles(folderBrowserDialog1.SelectedPath))
{
pbFilesProcessed.Maximum = Convert.ToInt32(files.Length.ToString());
string fileName = "Waveforms.csv";
int lineCount = 0;
string lines;
string newLines;
string csvFullFilePath = csvFile.ToString();
string[] filePathSplit = csvFullFilePath.Split('\\');
string pointName = filePathSplit[4].ToString();
string[] pathDirectionSplit = filePathSplit[5].ToString().Split('_');
string[] swingDirectionSplit = pathDirectionSplit[3].Split('.');
string swingDirection = swingDirectionSplit[0];
var numberOfLines = File.ReadLines(csvFile).Count();
using (StreamReader r = new StreamReader(csvFile))
{
while ((lines = r.ReadLine()) != null)
{
pbLinesProcessed.Maximum = Convert.ToInt32(numberOfLines.ToString());
if (lineCount == 0)
{
lines.Remove(0);
lineCount++;
}
else
{
newLines = Regex.Replace(lines, ",{2,}", ",").ToString();
File.AppendAllText(@"Simulator\\" + fileName, pointName + "," + swingDirection + "," + newLines + System.Environment.NewLine);
pbLinesProcessed.PerformStep();
lbProcessedLines.Text = "Lines: " + lineCount + "/" + Convert.ToInt32(numberOfLines.ToString());
lineCount++;
}
}
r.Close();
}
pbFilesProcessed.PerformStep();
lbProcessedFiles.Text = "Files: " + fileCount.ToString() + "/" + files.Length.ToString();
fileCount++;
}
btnParse.Visible = false;
MessageBox.Show("Done");
}
}
}