从一个文本文件中提取位置未知的行,并将其放置在另一个文本中
本文关键字:文本 另一个 位置 一个 提取 文件 未知 | 更新日期: 2023-09-27 18:24:48
我想把用户名放在一个文本文件中,然后放在另一个文件中,这样我就有了一个包含所有信息的原始文本文件和另一个只包含用户名的文本文件。每天都会生成一个包含所有用户名及其相应组的新文件,因此应该从最近的文件中读取。
遗憾的是,原始文本文件中的所有用户名都位于未知位置,但有一件事将用户名与组信息区分开来。
它们上面的一行都有一个[空格],下面的一行有"-------------------------"。另一个问题是,有些用户名下面有电子邮件地址,有些没有。因此,检查它是否是用户名的唯一可靠来源是用户名上方一行中的[space]。
由于这是一个相当大的文件,大约有700个用户名,手动将它们全部写下来会非常不舒服,而且不太重要。
示例输入文件(开头有一个空行,但markdown没有显示):
User1
-----------------------------
Group1
Group3
Group4
User2
mail@mail.com
-----------------------------
Group2
User3
-----------------------------
exampleGroup
Potatoes
我真的希望你能帮助我,因为我是一个相当初级的编码。
编辑
正如O.R.Mapper所说,这不是一个"为我写代码"的服务。
我忘记了包含我的代码,我正试图让它工作。不幸的是,它没有起作用。这是
string path = System.AppDomain.CurrentDomain.BaseDirectory;
path += "users.txt";
string[] fileLines = File.ReadAllLines(path);
if (File.Exists(path))
{
for (int zeileIndex = 0; zeileIndex < fileLines.Length; zeileIndex++)
{
string zeile = fileLines[zeileIndex];
//zeile is simply a word for line in another language
if (zeile.Contains(" "))
{
++zeileIndex;
if (zeile.Contains(" "))
{
++zeileIndex;
listboxNames.Items.Add(zeile);
}
}
}
}
下面是解决问题的一种方法的示意图。顺便说一句,对于像你这样的初学者来说,我建议你从Python这样的高级语言开始,因为这可以让你专注于编程概念,而不是低级内存管理和指针之类的东西。
我不懂C#,所以我没有详细查看您的代码。
输入数据如下:
... other stuff ...
[space]
line with username
optional line with email address
------------ (some number of repeated hyphens)
... other stuff ...
在您的示例文件中,[space]似乎意味着一个空行,所以我认为是这样。
我假设[空格]总是在用户名行之前,而从不在其他行之前。我还假设文件的第一行从来都不是用户名行。
所以,本质上我们想遍历这些行,跟踪前一行何时为空。在伪代码中:
prev_empty = false
while (readline(line)):
if line is empty:
prev_empty = true
else:
if prev_empty:
username = extract_uname(line)
output(username)
prev_empty = false
如果您决定也要捕获电子邮件地址,逻辑会变得更加复杂,但您使用的方法基本相同:通过使用标志或其他变量来跟踪状态,来跟踪您在文件中的位置。