我有点问题。让我解释一下工作场所。
我的文本文件结构: X_OFFSET 0 Y_OFFSET 0 IDSTART 0001 222 222 222 222 0002 250 500 250 0003 1700 500 500 250 0004 900 600 500 250 0005 1350 250 500 250 IDEND
我必须做的是找到IDSTART-IDEND块并删除它们之间的特定行。
示例:用户设置id1 123 124 125 126 => id1表示ID,123表示中心X,124表示中心Y,125表示中心Z,126表示半径。
单位: 用户将在文本框中输入ID号(例如id5),然后单击按钮删除以“id5”开头的整行...
这可能吗?如果是的话,我该怎么做呢?[Improved_v2]
哎呀,我做了一些改动,现在就可以了。但是,有问题。FileStream fs = new FileStream(“C:\ hucre.txt”,FileMode.Open); StreamReader okuma = new StreamReader(fs); string Metin = okuma.ReadToEnd(); char [] Ayrac = {'\ n'}; MetinSplit = Metin.Split(Ayrac);
for (int i = 0; i < MetinSplit.Length; i++)
{
GeciciDizi.Add("a");
GeciciDizi2.Add("b");
}
// MetinSplit'i GeciciDiziye At.
for (int i = 0; i < MetinSplit.Length; i++)
{
GeciciDizi[i] = MetinSplit[i];
}
for (int i = 0; i < MetinSplit.Length; i++)
{
GeciciDizi2[i] = MetinSplit[i];
}
for (int i = 0; i < GeciciDizi.Count; i++)
{
if((string)GeciciDizi[i]==SilinecekDeger)
GeciciDizi.RemoveAt(i);
}
for (int i = 0; i < GeciciDizi.Count; i++)
{
GeciciDizi2[i] = GeciciDizi[i];
}
okuma.Close();
fs.Close();
FileStream newFile = new FileStream("C:\\hucretemp.txt", FileMode.Open);
StreamWriter yaz = new StreamWriter(newFile);
for (int i = 0; i < GeciciDizi2.Count; i++)
{
yaz.WriteLine(GeciciDizi2[i]);
}
yaz.Close();
yeniFile.Close();
File.Delete("C:\\hucre.txt");
File.Move(@"C:\\hucretemp.txt", @"C:\\hucre.txt");
}
}
这里的问题是这个。
当我从文件hucre.txt读取到我的tempArrayList时,它会转到如下所示的数组。
X_OFFSET 0 \ r \ n Y_OFFSET 0 \ r \ n IDSTART \ r \ n 0001 222 222 222 222 \ r \ n 0002 250 500 250 \ r \ n 0003 1700 500 500 250 \ r \ n 0004 900 600 500 250 \ r \ n 0005 1350 250 500 250 \ r \ n IDEND
再添加一个\ r。
所以,当我想阅读“hucre.txt”中的内容时, 我无法做到,因为 它变成了这个0001 222 222 222 222 * \ r \ r \ n *
如何删除它?
我真的很绝望,请帮助:/
我最诚挚的问候......
答案 0 :(得分:2)
我没有读完你的所有代码,但你的I / O逻辑是复杂和低效的方式。
基本理念:
using (var reader = File.OpenText(orgFileName))
using (var writer = File.CreateText(tmpFileName))
{
while (true)
{
string line = reader.ReadLine();
if (line == null)
break; // done
// logic to analyze / track content
if ( Is_special_line)
{
// do something, or maybe nothing (skip)
}
else
{
writer.WriteLine(line);
}
}
}
File.Delete(orgFilename);
File.Rename(tmpFilename, orgFilename);