在输入文件中找不到字符串
本文关键字:找不到 字符串 文件 输入 | 更新日期: 2023-09-27 18:36:28
我有一个文本文件,我正在尝试在其中插入一行代码。使用我的链接列表,我相信我可以避免将所有数据取出,对其进行排序,然后将其制作成一个新的文本文件。我所做的是想出下面的代码。我设置了我的布尔值,但它仍然不起作用。我通过调试器,似乎正在发生的事情是它正在浏览整个列表(大约 10,000 行),并且没有发现任何真实的东西,所以它没有插入我的代码。
为什么或这个代码有什么问题?
List<string> lines = new List<string>(File.ReadAllLines("Students.txt"));
using (StreamReader inFile = new StreamReader("Students.txt", true))
{
string newLastName = "'Constant";
string newRecord = "(LIST (LIST 'Constant 'Malachi 'D ) '1234567890 'mdcant@mail.usi.edu 4.000000 )";
string line;
string lastName;
bool insertionPointFound = false;
for (int i = 0; i < lines.Count && !insertionPointFound; i++)
{
line = lines[i];
if (line.StartsWith("(LIST (LIST "))
{
values = line.Split(" ".ToCharArray());
lastName = values[2];
if (newLastName.CompareTo(lastName) < 0)
{
lines.Insert(i, newRecord);
insertionPointFound = true;
}
}
}
if (!insertionPointFound)
{
lines.Add(newRecord);
}
您只是将文件读入内存,而不是将其提交到任何地方。
恐怕您将不得不加载并完全重写整个文件。 文件支持追加,但不支持插入。
您可以像读取文件一样写入文件
string[] lines;
/// instanciate and build `lines`
File.WriteAllLines("path", lines);
WriteAllLines
也需要一个IEnumerable
,所以如果你愿意,你可以把一List
串子放进去。
还有一个问题:看起来好像您正在阅读文件两次。 一个用ReadAllLines
,另一个用你的StreamReader
.
至少有四种可能的错误。
- 不需要打开流阅读器,您已经阅读了所有的台词。(好吧,这不是一个真正的错误,但是...
- 如果您以空白开头的行,则可能会欺骗对 StartsWith 的检查空格,您将错过插入点。(添加修剪将消除此处的任何问题)
- 在 CompareTo 行中,您检查<0,但您应该检查 == 0。但是,如果字符串等效,则比较返回 0.....
-
要检查两个字符串是否相等,您应该避免使用 CompareTo as在上面的 MSDN 链接中进行了说明,但使用字符串。等于
List<string> lines = new List<string>(File.ReadAllLines("Students.txt")); string newLastName = "'Constant"; string newRecord = "(LIST (LIST 'Constant 'Malachi 'D ) '1234567890 'mdcant@mail.usi.edu 4.000000 )"; string line; string lastName; bool insertionPointFound = false; for (int i = 0; i < lines.Count && !insertionPointFound; i++) { line = lines[i].Trim(); if (line.StartsWith("(LIST (LIST ")) { values = line.Split(" ".ToCharArray()); lastName = values[2]; if (newLastName.Equals(lastName)) { lines.Insert(i, newRecord); insertionPointFound = true; } } } if (!insertionPointFound) lines.Add(newRecord);
我没有将丢失的写回文件列为错误。希望您刚刚省略了代码的那部分。否则这是一个非常简单的问题。(但是我认为使用CompareTo
的方式可能是您问题的主要原因)
编辑 查看您在下面的评论,似乎Sam I Am
的答案适合您。当然,您需要写回修改后的行数组。所有更改都是对内存中的行数组进行的,如果没有写入文件的代码,则不会将任何内容写回文件。但是您不需要新文件
File.WriteAllLines("Students.txt", lines);