假设我在一个名为users.txt的txt文件中有5行,每行都有以下信息
用户名:密码
我将如何分割txt文件中的每一行并将用户名存储为一个字符串和密码作为另一个。
我有使用此代码获取随机行的代码。此代码用于我的项目的另一部分,所以我不希望代码被更改。我想在线路被抓住后调用另一个函数,但我不知道如何将它拆分为:
private static string GetRandomLine(string file)
{
List<string> lines = new List<string>();
Random rnd = new Random();
int i = 0;
try
{
if (File.Exists(file))
{
//StreamReader to read our file
StreamReader reader = new StreamReader(file);
//Now we loop through each line of our text file
//adding each line to our list
while (!(reader.Peek() == -1))
lines.Add(reader.ReadLine());
//Now we need a random number
i = rnd.Next(lines.Count);
//Close our StreamReader
reader.Close();
//Dispose of the instance
reader.Dispose();
//Now write out the random line to the TextBox
return lines[i].Trim();
}
else
{
//file doesn't exist so return nothing
return string.Empty;
}
}
catch (IOException ex)
{
MessageBox.Show("Error: " + ex.Message);
return string.Empty;
}
}
答案 0 :(得分:4)
您应该可以使用string.Split:
string line = GetRandomLine(file);
string[] parts = line.Split(':');
string user = parts[0];
string pass = parts[1];
话虽如此,您可能还想添加错误检查(即:确保parts
有2个元素等)。
答案 1 :(得分:0)
分割字符串很简单:
string[] components = myUserAndPass.Split(':');
string userName = components[0];
string passWord = components[1];
答案 2 :(得分:0)
尝试阅读以下stackoverflow页面:
答案 3 :(得分:0)
使用Split()
方法。
例如,在这种情况下
string[] info = lines[i].Split(':');
info[0]
将拥有用户名,info[1]
将拥有密码。
答案 4 :(得分:0)
尝试这样的事情......
string [] split = line.Split(':');
string username = split [0];
string pwd = split [1];
答案 5 :(得分:0)
Reed Corpsey已经给出了一个很好的答案,所以我不想给出另一个解决方案,我只想对你的代码做一个评论。您可以使用Using
语句来处理为您调用的StreamReader
Close和Dispose方法。这样,如果发生错误,您不必担心Stream保持打开状态。
略微更改代码会使其看起来像:
//StreamReader to read our file
using(StreamReader reader = new StreamReader(file))
{
//Now we loop through each line of our text file
//adding each line to our list
while (!(reader.Peek() == -1))
lines.Add(reader.ReadLine());
//Now we need a random number
i = rnd.Next(lines.Count);
}
//Now write out the random line to the TextBox
return lines[i].Trim();
答案 6 :(得分:0)
这更干净,并处理密码可能包含':'
的情况当然,我希望您确保密码不是纯文本,并且哈希密码不包含任何':';但是,如果他们这样做,这是可行的:
Split()会导致其他问题。
bool GetUsernamePassword(string line, ref string uname, ref string pwd)
{
int idx = line.IndexOf(':') ;
if (idx == -1)
return false;
uname = line.Substring(0, idx);
pwd = line.Substring(idx + 1);
return true;
}
string username_password = "username:password";
string uname = String.Empty;
string pwd = String.Empty;
if (!GetUsernamePassword(username_password, ref uname, ref pwd))
{
// Handle error: incorrect format
}
Console.WriteLine("{0} {1} {2}", username_password, uname, pwd);
顺便说一句。如果用户名为':',则表示上述情况不起作用(与此之前的所有其他解决方案一样):P但这将处理密码为':'的情况。