我的项目目前正在删除 - 符号之后的所有文本,因为它代表一个评论。 我的代码现在是在评论之前删除文本文件中文本中的所有文本。
到目前为止,这是我的代码:
static void Main( string[] args )
{
string line = null;
string line_to_delete = "--";
string desktopLocation = Environment.GetFolderPath( Environment.SpecialFolder.Desktop );
string text = Path.Combine( desktopLocation, "tim3.txt" );
string file = Path.Combine( desktopLocation, "tim4.txt" );
using (StreamReader reader = new StreamReader( text ))
{
using (StreamWriter writer = new StreamWriter( file ))
{
while (( line = reader.ReadLine() ) != null)
{
if (string.Compare( line, line_to_delete ) == 0)
File.WriteAllText( file, File.ReadAllText( text ).Replace( line_to_delete, "" ) );
continue;
}
}
我如何指定它必须只删除te 感谢
答案 0 :(得分:2)
您可以使用RegEx或以下代码
var @index = line.IndexOf(line_to_delete);
if(@index != -1){
var commentSubstring = line.Substring(@index, line.Length - @index); //Contains only the comments
line.Replace(commentSubstring, "").ToString()//Contains the original with no comments
}
如果评论在下面的布局中
Blah blah - 一些评论 - 更多评论adasdasd asfasffa
asasff - 更多评论
答案 1 :(得分:2)
s.indexOF第一次搜索“ - ” s.remove从indexof开始并删除所有内容。 编辑:根据Jays评论修复了异常
string s = "aa--aa";
int i = s.IndexOf("--");
if (i >= 0)
s = s.Remove(i);
MessageBox.Show(s);
或者我在这里为你排好了
string s = "aa--aa";
s = s.IndexOf("--") >= 0 ? s.Remove(s.IndexOf("--")) : s;
答案 2 :(得分:1)
代码中的问题是,只有当文件包含一行完全等于“ - ”的行时,才会发生替换(这是写入输出文件的唯一指令)。
此外,如果您使用WriteAllText和ReadAllText,则不需要while循环,并且无论如何都不能使用它们,因为这样您只会删除“ - ”,而不会删除之后的所有内容。 / p>
我认为这样的事情应该有效:
using (StreamReader reader = new StreamReader( text ))
{
using (StreamWriter writer = new StreamWriter( file ))
{
while (( line = reader.ReadLine() ) != null)
{
int idx = line.IndexOf(line_to_delete);
if (idx == 0) // just skip the whole line
continue;
if (idx > 0)
writer.WriteLine(line.Substring(0, idx));
else
writer.WriteLine(line);
}
}
}