C# 替换文本文件中的单词
我正在做一个小程序,其中一些用户保存的数据存储在一个文本文件中。我正在使用C# 替换文本文件中的单词,c#,file,text,replace,streamwriter,C#,File,Text,Replace,Streamwriter,我正在做一个小程序,其中一些用户保存的数据存储在一个文本文件中。我正在使用system.IO和Streamwriter将新信息写入文本文件 文件中的文本格式如下: 名称1、1000、387 姓名2200144 。。。等等我使用infos=line.Split(',')将不同的值返回到一个数组中,该数组对于搜索更有用。我所做的是使用While循环搜索正确的行(名称匹配的位置),然后使用infos[1]返回点数 我想修改这个infos[1]值并将其设置为其他值。我正试图找到一种方法来替换C#中的一个
system.IO
和Streamwriter
将新信息写入文本文件
文件中的文本格式如下:
名称1、1000、387姓名2200144 。。。等等我使用
infos=line.Split(',')
将不同的值返回到一个数组中,该数组对于搜索更有用。我所做的是使用While
循环搜索正确的行(名称匹配的位置),然后使用infos[1]
返回点数
我想修改这个infos[1]
值并将其设置为其他值。我正试图找到一种方法来替换C#中的一个单词,但我找不到一个好方法。据我所知,没有办法替换一个单词,你必须重写整个文件
有没有办法完全删除一行,这样我就可以在文本文件末尾重写它,而不用担心它被复制
我尝试使用
Replace
关键字,但没有成功。看到针对类似问题提出的答案,我有点不知所措,因此如果有人能向我解释一下我的选择,我将不胜感激。很可能你是C#新手,没有意识到字符串是不可变的(这是一种说你不能更改它们的奇特方式)。您只能通过修改旧字符串来获取新字符串:
String MyString = "abc 123 xyz";
MyString.Replace("123", "999"); // does not work
MyString = MyString.Replace("123", "999"); // works
[编辑:]
如果我理解你的后续问题,你可以这样做:
infos[1] = infos[1].Replace("1000", "1500");
如果我理解正确,您可以使用
File.ReadLines
方法和LINQ
来完成此操作。首先,获取所需的行:
var line = File.ReadLines("path")
.FirstOrDefault(x => x.StartsWith("name1 or whatever"));
if(line != null)
{
/* change the line */
}
然后将新行写入文件,不包括旧行:
var lines = File.ReadLines("path")
.Where(x => !x.StartsWith("name1 or whatever"));
var newLines = lines.Concat(new [] { line });
File.WriteAllLines("path", newLines);
您正在寻找的概念称为文件读/写的“随机访问”。C#中大多数易于使用的I/O方法都是“SequentialAccess”,这意味着您可以读取一个块或一行,然后前进到下一个块或行 然而,您想要做的是可能的,但是您需要阅读一些关于文件流的教程。这里有一个相关的问题 您可能正在读取整个文件,或者作为搜索的一部分逐行读取它。如果字段长度固定,则可以读取固定数量的字节,跟踪
流。读取时定位,知道要读取和需要替换的字符数,然后打开文件进行写入,移动到流中的确切位置,并写入新值
如果你对streams还不熟悉,这有点复杂。如果您的文件不是很大,System.IO库可以非常高效地逐行复制文件,如果编码正确,那么您可以按照第二个建议,即逐行读取文件,将其写入新流(内存、临时文件等),在达到该值时替换有问题的行,完成后,替换原代码。显示您当前的代码为什么否决?这就是OP所说的:“我试着使用Replace关键字,但是没有用。”谢谢你的快速回复,如果我使用MyString=MyString.Replace(“1000”,“1500”)
,然后将infos[1]
设置为MyString
,它可以工作吗?你甚至可以使用infos[1]=infos[1]。Replace(“1000”,“1500”)代码>但是,您是否将字符串替换与更新文件相混淆?从文件中读取字符串后,该字符串将在内存中。更改它只会在内存中更改它<代码>替换
不会将新值写回文件。您必须将文件编写作为代码的一部分……Selmann22的建议非常优雅ReadLines
/WriteAllines
…我甚至不知道的来自4.0的精彩添加。很荣幸能指出他们@mdisibio是的,它们在处理文本文件时非常有用。非常感谢(也感谢@mdisibio),我的问题是如何在文本文件中更新它,而不仅仅是如何修改内存中的值。在接下来的问题中,我会尽量说得更清楚。:)