2016-12-23 4 views
3

2次元配列にプロキシを含むテキストファイルを読み込もうとしています。c#2次元配列にテキストファイルを追加

テキストファイルには、次のようになります?

[00.00:

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] [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) 
     { 

     } 
    } 
} 

答えて

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>を返し、一度にファイル全体を読み取ることはありません。この場合、おそらく2次元配列から離れて単純なクラス(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]); 
} 
+0

あなたはなし、改行を取り除くために呼び出す)(トリムを必要とするかもしれませんか? – Levon

+1

@Levon - ReadAllLinesのドキュメントから - "結果の文字列には終端の改行や改行が含まれていない"ので、この場合は不要と考えています。それを "安全"にするか、行に余分な空白があっても改行のようなものがあれば、それらはすでに外されているはずです。 – pstrjds

+0

私はOPがそれを投稿したので、ファイルを読みました..ありがとう! – Levon

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; 
    } 
+0

オペレータは2d配列を要求しました。文字列を含む1次元のリストではなく、角括弧で囲まれています。 – pstrjds