C#将文本文件添加到二维数组

3
我正在尝试读取一个文本文件,其中包含代理到一个二维数组中。
文本文件的格式如下:
00.00.00.00:80
00.00.00.00:80
00.00.00.00:80
00.00.00.00:80
00.00.00.00:80

如何将IP地址和端口号分开?所以我的数组应该是这样的:

[00.00.00.00][80]

当前代码:
public void readProxyList(string FileName)
{
    using (StreamReader sr = new StreamReader(FileName, Encoding.Default))
    {
        string text = sr.ReadToEnd();
        string[] lines = text.Split('\r');

        foreach (string s in lines)
        {

        }
    }
}
2个回答

6
如果你不希望文件太大,可以使用File.ReadAllLines方法读取每一行。然后用冒号 ":" 作为分隔符来拆分字符串,可以使用String.Split方法。
示例:
var lines = File.ReadAllLines(FileName));
var array = new string[lines.Length,2];
for(int i=0; i < lines.Length; i++)
{
    var temp = lines[i].Split(':');
    array[i,0] = temp[0];
    array[i,1] = temp[1];
}

编辑

如果你预计文件可能很大,不要使用ReadAllLines,可以使用File.ReadLines。这个方法返回一个IEnumerable<string>,不会一次性读取整个文件。在这种情况下,我可能会选择放弃二维数组,并创建一个简单的类(比如叫做IpAndPort)并创建一个该类的列表。

例子:

public sealed class IpAndPort
{
    public string Ip { get; private set; }
    public string Port { get; private set; }
    public IpAndPort (string ip, string port)
    {
        Ip = ip;
        Port = port;
    }
}

var list = new List<IpAndPort>();
foreach(var line in File.ReadLines(FileName))
{
    var temp = line.Split(':');
    list.Add(new IpAndPort(temp[0], temp[1]);
}

你可能需要使用Trim()来去除换行符,对吗? - Levon
1
@Levon - 从ReadAllLines的文档中可以看到,“结果字符串不包含终止回车符和/或换行符”,因此我认为在这种情况下它是不必要的。你可以添加它以保险起见,或者如果行中有额外的空格,但就换行而言,它们应该已经被剥离了。 - pstrjds

0
尝试这个:
    public IEnumerable<string> GetProxyList(string FileName)
    {
        string[] allLines = File.ReadAllLines(FileName);
        var result = new List<string>(allLines.Length);

        foreach (string line in allLines)
        {
            var splittedLine = line.Split(':');
            result.Add($"[{splittedLine[0]}][{splittedLine[1]}]");
        }
        return result;
    }

OP要求一个二维数组,而不是包含字符串的单一维度列表,现在被包裹在方括号中。 - pstrjds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接