我正在尝试从我创建的文件“Test.txt”中的特定行中删除文本。
这是用Test.txt写的文本:
1
2
3
4
5个
1
2
3
4
5个
1
2
3
4
5个
现在我想要发生的是当我要在第二次迭代中移除2 - 4时,输出应该是这样的:
1
2
3
4
5个
1
5个
1
2
3
4
5个
我想要的是只删除相应文本被删除的空格,最好不要涉及其他空格。
但当我尝试代码时,它给了我这个输出:
1
2
3
4
5个
1
5个
1
2
3
4
5个
正如你可以看到上面的输出,那就是我所说的不需要的空间。以下是我尝试过的代码:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestCode
{
class Program2
{
static void Main()
{
lineChanger("", @"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\Test.txt", 8);
lineChanger("", @"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\Test.txt", 9);
lineChanger("", @"C:\Users\User1\Documents\Visual Studio 2015\WebSites\MusicStore\Pages\Test.txt", 10);
}
static void lineChanger(string newText, string fileName, int line_to_edit)
{
string[] arrLine = File.ReadAllLines(fileName);
arrLine[line_to_edit - 1] = newText;
File.WriteAllLines(fileName, arrLine);
}
}
}
另外,请随意提出任何适当的技巧,并请提供实际的例子。
答案 0 :(得分:1)
请看这可以吗?
int removeAt = 7; //or any thing you want
int linesToRemove = 3; //or any thing you want
string s = System.IO.File.ReadAllText("Test.txt");
List<string> arr = s.Split("\n".ToCharArray()).ToList();
for (int i = 0; i < linesToRemove; i++)
arr.RemoveAt(removeAt);
string result = "";
foreach (string str in arr)
{
result += str;
}
System.IO.File.WriteAllText("Test.txt", result);
我很高兴你说这对你有用,在这里我添加了另一种解决方案,也许在某些情况下你需要使用它:
int removeAt = 7; //or any thing you want
int linesToRemove = 3; //or any thing you want
string s = System.IO.File.ReadAllText("Test.txt");
List<string> arr = s.Split(new char[] { '\n' }).ToList();
List<int> realBareRows = new List<int>();
for (int i = 0; i < arr.Count; i++)
{
if (string.IsNullOrEmpty(arr[i].Replace("\r", "")))
realBareRows.Add(i);
}
List<string> newArr = s.Split(System.Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (int j in realBareRows)
newArr.Insert(j, "\n");
for (int i = 0; i < linesToRemove; i++)
newArr.RemoveAt(removeAt);
string result = "";
foreach (string str in newArr)
{
result += str + System.Environment.NewLine;
}
System.IO.File.WriteAllText("Test.txt", result);
答案 1 :(得分:0)
我建议您通过File.ReadLines
删除这些行。你可以这样做:
foreach (var line in File.ReadLines(fileName))
{
//Add it to your arrLine and don't insert a line based on your condition.
}
我不太确定你的病情是什么。我认为它基于line_to_edit
希望这有帮助!
答案 2 :(得分:0)
您可以省略0长度的所有行
File.WriteAllLines(fileName, arrLine.Where(x => x.Length>0));