C # Струнная манипуляция - PullRequest
       36

C # Струнная манипуляция

2 голосов
/ 20 октября 2010

Я работаю над приложением, которое получает текст из текстового файла на странице. Пример ссылки: http://test.com/textfile.txt

Этот текстовый файл содержит следующий текст:

1 Milk Stuff1.rar
2 Milk Stuff2.rar
3 Milk Stuff2-1.rar
4 Union Stuff3.rar

Я пытаюсь сделать следующее, чтобы удалить все из каждогострока, за исключением слов, которые начинаются с «Stuff» и заканчиваются на «.rar».

Проблема в том, что большинство простых решений, таких как использование .Remove, .Split или .Replace, заканчиваются неудачей.Это происходит потому, что, например, форматирование строки с использованием пробелов в итоге возвращает следующее:

1
Milk
Stuff1.rar\n2
Milk
Stuff2.rar\n3
Milk
Stuff2-1.rar\n4
Union
Stuff3.rar\n

Могу поспорить, что это не так сложно, как кажется, но я буду признателен за любую помощь, которую вы можете мне дать.

Ps: Просто чтобы прояснить, это то, что я хочу вернуть:

Stuff1.rar
Stuff2.rar
Stuff2-1.rar
Stuff3.rar

В настоящее время я работаю с этим кодом:

            client.HeadOnly = true;
            string uri = "http://test.com/textfile.txt"; 

            byte[] body = client.DownloadData(uri);
            string type = client.ResponseHeaders["content-type"]; 
            client.HeadOnly = false; 

            if (type.StartsWith(@"text/")) 
            {
                string[] text = client.DownloadString(uri);

                foreach (string word in text)
                {
                    if (word.StartsWith("Patch") && word.EndsWith(".rar"))
                    {
                        listBox1.Items.Add(word.ToString());
                    }
                }
            }

Это явно неработает, но вы поняли.

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 20 октября 2010

Это должно работать:

        using (var writer = File.CreateText("output.txt"))
        {
            foreach (string line in File.ReadAllLines("input.txt"))
            {
                var match = Regex.Match(line, "Stuff.*?\\.rar");

                if (match.Success)
                    writer.WriteLine(match.Value);
            }
        }
2 голосов
/ 20 октября 2010

Я бы соблазнился использовать регулярные выражения для такого рода вещей.

Что-то вроде

Stuff[^\s]*.rar

вытащит только тот текст, который вам нужен.Как насчет такой функции, как:

public static IEnumerable<string> GetStuff(string fileName)
{
    var regex = new Regex(@"Stuff[^\s]*.rar");
    using (var reader = new StreamReader(fileName))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            var match = regex.Match(line);
            if (match.Success)
            {
                yield return match.Value;
            }
        }
    }
}
0 голосов
/ 20 октября 2010
for(string line in text)
{
    if(line.EndsWith(".rar"))
    {
        int index = line.LastIndexOf("Stuff");
        if(index != -1)
        {
            listBox1.Items.Add(line.Substring(index));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...