我正在尝试读取一个文本文件,其中包含一个二维数组的代理。
文本文件如下所示:
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)
{
}
}
}
答案 0 :(得分: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>
,不会立即读取整个文件。在这种情况下,我可能会选择远离2d数组并创建一个简单的类(称之为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]);
}
答案 1 :(得分: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;
}