c#split line with .text

时间:2011-03-11 20:33:30

标签: c# .net string

假设我在一个名为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;
        }
    }

7 个答案:

答案 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)

答案 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但这将处理密码为':'的情况。