取出文件內的數值,重新生成一個新的文件

david0620 2008-07-15 05:20:24
文件(內容)如下,“#”後的是字段,每字段下對應一個數值,如果數值為空就用","隔開。
# FileName,DATE COMPLETED,TIME COMPLETED,SYSTEM ID,FIXTURE ID,FIRMWARE REV,OPERATOR,PROGRAM,DIAGS REV,BIOS REV,UUT REV,TESTING TIME,STATUS,NUM STEPS FAILED,NUM FAILED FACTS,NUM POSTINGS,FAILED STEP PATH,MEASURED,EXPECTED,ETHERNET ADDR,PARTNUM,FACT
1234567890,02-25-2006,00:07:00,WS470-036,,,00022294,,,4.35.20.45.14,,,PASS,,,,,,,+1234,,N/A
2345678901,02-25-2006,00:13:32,WS470-020,,,00022294,,,4.35.20.45.14,,,PASS,,,,,,,+1234,,N/A
3456789012,02-25-2006,00:14:52,WS470-036,,,00022294,,,4.35.20.45.14,,,PASS,,,,,,,+1234,,N/A

如何將此文件內,根據每行的字段重新生成一個新的文件,並用FileName此字段來作為新文件的命名,如1234567890.txt

例:重新生成的新文件應該為:
文件名:1234567890.txt
# FileName,DATE COMPLETED,TIME COMPLETED,SYSTEM ID,FIXTURE ID,FIRMWARE REV,OPERATOR,PROGRAM,DIAGS REV,BIOS REV,UUT REV,TESTING TIME,STATUS,NUM STEPS FAILED,NUM FAILED FACTS,NUM POSTINGS,FAILED STEP PATH,MEASURED,EXPECTED,ETHERNET ADDR,PARTNUM,FACT
1234567890,02-25-2006,00:07:00,WS470-036,,,00022294,,,4.35.20.45.14,,,PASS,,,,,,,+1234,,N/A
文件名:2345678901.txt
# FileName,DATE COMPLETED,TIME COMPLETED,SYSTEM ID,FIXTURE ID,FIRMWARE REV,OPERATOR,PROGRAM,DIAGS REV,BIOS REV,UUT REV,TESTING TIME,STATUS,NUM STEPS FAILED,NUM FAILED FACTS,NUM POSTINGS,FAILED STEP PATH,MEASURED,EXPECTED,ETHERNET ADDR,PARTNUM,FACT
2345678901,02-25-2006,00:13:32,WS470-020,,,00022294,,,4.35.20.45.14,,,PASS,,,,,,,+1234,,N/A

用winform來實現?





...全文
112 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
smntbk 2008-07-17
  • 打赏
  • 举报
回复
System.IO.FileSystemWatcher watch = new System.IO.FileSystemWatcher("目录名","文件名"); 
david0620 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 smntbk 的回复:]
没错,ls说的对用FileSystemWatch类

C# codeSystem.IO.FileSystemWatcher watch = new System.IO.FileSystemWatcher("E:\\","aa.txt");
watch.Changed += new System.IO.FileSystemEventHandler(watch_Changed);
watch.EnableRaisingEvents = true;


//在changed事件中处理最后一行即可

C# codevoid watch_Changed(object sender, System.IO.FileSystemEventArgs e)
{
//TODO..
}
[/Quote]

如果我的目錄下還有子目錄,當子目錄下的文件如果發生了變化,怎麼得到是哪個文件變化了?
smntbk 2008-07-16
  • 打赏
  • 举报
回复
没错,ls说的对用FileSystemWatch类
System.IO.FileSystemWatcher watch = new System.IO.FileSystemWatcher("E:\\","aa.txt");
watch.Changed += new System.IO.FileSystemEventHandler(watch_Changed);
watch.EnableRaisingEvents = true;

//在changed事件中处理最后一行即可
void watch_Changed(object sender, System.IO.FileSystemEventArgs e)
{
//TODO..
}
lovefootball 2008-07-16
  • 打赏
  • 举报
回复
使用filesystemwatcher监视文件
如果有变动则读取最后一行
david0620 2008-07-16
  • 打赏
  • 举报
回复
smntbk,我的環境是這樣的:
有一個總的txt檔,下面會有好多行...會有一些新的信息不斷的寫入這個總的Txt檔,並且會生成一行行的,像上面一樣。相應這個總的Txt檔的時間也會變動(更新時間)。

有沒有什麼辦法可以得知這個txt檔是否變動了(更新時間),如果有變動就取出變動的一行生成一個單獨的txt檔案...
lovefootball 2008-07-16
  • 打赏
  • 举报
回复

string filePath = "你的路径";
using (StreamReader sr = new StreamReader(filePath))
{
string temp = "";
while (sr.EndOfStream)
{
if (String.IsNullOrEmpty(temp))
{
temp = sr.ReadLine();
temp = temp.Substring(1);
}
else
{
string t = sr.ReadLine();

string path = Path.Combine(new FileInfo(filePath).DirectoryName,t.Split(',')[0] + ".txt");
using (StreamWriter sw = new StreamWriter(path))
{
sw.WriteLine(t);
}
}
}
}
smntbk 2008-07-16
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
StreamReader reader = new StreamReader(@"E:\test.txt");//test.txt:原始文件
string headText = reader.ReadLine();//先读出第一行,用作标题
//接着读下面的内容,直到读完
while (!reader.EndOfStream)
{
string str = reader.ReadLine(); //读取一行
StreamWriter sw = new StreamWriter("E:\\" + str.Substring(0, str.IndexOf(",")) + ".txt");//创建文件(文件名用第一个','前的内容)
sw.WriteLine(headText);//向文件写标题
sw.WriteLine(str);//写该行内容
sw.Close();//关闭流
}
}


也可以用reader.ReadToEnd()读取全部。再用正则@"\r\n"分割成string数组再保存。
lfywy 2008-07-16
  • 打赏
  • 举报
回复
简单
学习了
smntbk 2008-07-16
  • 打赏
  • 举报
回复
//取最后一行
StreamReader reader = new StreamReader(@"E:\test.txt");
string[] str = System.Text.RegularExpressions.Regex.Split(reader.ReadToEnd(),@"\r\n");//把文本内容按行保存在str数组中
string lastLine = str[str.Length-1];//最后一行


有一点:如果文本中内容很大的时候这种方法性能不是很好,那就可以定义一个变量保存改变前文本的Length,改变后直接取文本的SubString(Length).Trim()即是改变的文本内容。
david0620 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 smntbk 的回复:]
没错,ls说的对用FileSystemWatch类

C# codeSystem.IO.FileSystemWatcher watch = new System.IO.FileSystemWatcher("E:\\","aa.txt");
watch.Changed += new System.IO.FileSystemEventHandler(watch_Changed);
watch.EnableRaisingEvents = true;


//在changed事件中处理最后一行即可

C# codevoid watch_Changed(object sender, System.IO.FileSystemEventArgs e)
{
//TODO..
}
[/Quote]

如何只處理最後一行的資料啊?
david0620 2008-07-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 smntbk 的回复:]
C# codeprivate void button1_Click(object sender, EventArgs e)
{
StreamReader reader = new StreamReader(@"E:\test.txt");//test.txt:原始文件
string headText = reader.ReadLine();
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
StreamWriter sw = new StreamWriter("E:\\" + str.S…
[/Quote]

可以解释一下哪些代码的意思吗?
smntbk 2008-07-15
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
StreamReader reader = new StreamReader(@"E:\test.txt");//test.txt:原始文件
string headText = reader.ReadLine();
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
StreamWriter sw = new StreamWriter("E:\\" + str.Substring(0, str.IndexOf(",")) + ".txt");
sw.WriteLine(headText);
sw.WriteLine(str);
sw.Close();
}
}

110,015

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧