2015-08-21 3 views
1

У меня есть ListBox, который я загружать элементы из кнопки с этим кодом:Проверьте, сколько раз строка появится в ListBox

OpenFileDialog ofd = new OpenFileDialog(); 
if (ofd.ShowDialog() == DialogResult.OK) 
{ 
    string[] lines = System.IO.File.ReadAllLines(ofd.FileName); 
    foreach (string line in lines) 
    { 
     listBox1.Items.Add(line); 
    } 
} 

Файл I нагрузки содержит список (.txt) в формате:

username:password:proxy 

Моя цель - найти только прокси и подсчитать, сколько раз появляется каждый прокси.

Поэтому я использую этот код:

List<string> proxies = new List<string>(); 
foreach (string s in listBox1.Items) 
      { 
       proxies.Add(Regex.Match(s, @"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\:\d{2,5}\b", RegexOptions.Singleline).ToString()); 
      } 

Теперь у меня есть все прокси из файла в списке, но как я могу сохранить его в формате, так что каждый прокси показывает, сколько раз он появился?

Например:

proxy1 - 8 (times) 
proxy2 - 5 (times) 
proxy3 - 4 (times) 

ответ

5

Если вы хотите распечатать отчетв предлагаемом формате, т.е.

proxy1 - 8 (times) 
    proxy2 - 5 (times) 
    proxy3 - 4 (times) 

вы можете использовать Linq

String report = String.Join(Environment.NewLine, 
    File.ReadLines(@"C:\MyFile.txt") 
    .Select(line => line.Split(':')[2]) 
    .GroupBy(item => item) 
    .Select(chunk => String.Format("{0} - {1} (times)", chunk.Key, chunk.Count()))); 

Console.Write(report); 
// Or 
// listBox1.Text = report; 
+0

Я думаю, что пользователь просит есть, он хочет «Текст» об изменении пункта от «Proxy1» до «proxy1 - 8" . Это верно? –

+0

@JasonGeiger Это именно то, что я хочу сделать, за исключением того, что он выводит все из них как 1 строку, я пытался поместить их 1 на 1 в новый listBox. – user5204184

+0

Мне нравится этот ответ, он очень короткий и делает то, что мне нужно, спасибо! – user5204184

0

Вместо

listBox1.Items.Add(line); 

Вы хотите сделать что-то вроде этого ...

ListBox1.Items.Insert(0,new ListItem("Label", "Value")) 
Смежные вопросы