Pobranie kilku string'ów

0

Witam :)

Mam o to taki kod:

String online = elem.InnerHtml;
var ch = (char)34;
int startPos = online.LastIndexOf("ogin" + ch.ToString() + ":") + ("ogin" + ch.ToString() + ":").Length + 1;
int length = online.IndexOf(ch.ToString() + "," + ch.ToString() + "foto_i") - startPos;
String sub = (online.Substring(startPos, length));
MessageBox.Show(sub);

Treść tekstu wygląda mniej więcej tak: ogin":"RED","foto_i","ogin":"GREEN","foto_i","ogin":"BLUE","foto_i"
Chcę, aby z tego tekstu były wyciągane te słowa: RED, GREEN, BLUE
Niestety kod nie działa, działa jedynie wtedy, gdy treść wygląda tak: ogin":"RED","foto_i"
Wtedy MessageBox pokazuje: RED

Z góry dzięki za pomoc :)

2

Możesz spróbować w ten sposób:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Soft
{
    class Program
    {
        static void Main(string[] args)
        {
            var phrase = "\"ogin\":\"RED\",\"foto_i\",\"ogin\":\"GREEN\",\"foto_i\",\"ogin\":\"BLUE\",\"foto_i\"" +
                         ",\"foto_i\",\"ogin\":\"BLUE\",\"foto_i\"";
            var split = phrase.Split(new[] { "\"ogin\":", ",\"foto_i\"", "," }, StringSplitOptions.RemoveEmptyEntries);
            Console.WriteLine(string.Join(", ", split));
        }
    }
}

http://ideone.com/zIdyBE

Jeżeli widzisz w treści pewną powtarzalność, to split jest dobrym wyborem.

0

Niestety nie działa tak, jak powinno. Ale to mój błąd, a mianowicie powinienem wspomnieć o tym, że są też tam losowe znaki, tekst wygląda dokładniej tak:

 ogin":"RED",abcxsu"foto_i", aa1 "ogin":"GREEN","foto_i", bx2"ogin":"BLUE","foto_i"
1

Tak na szybko:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Soft
{
    class Program
    {
        static void Main(string[] args)
        {
            var words = new[] { "RED", "GREEN", "BLUE" };
            var phrase = "ogin\":\"RED\",abcxsu\"foto_i\", aa1 \"ogin\":\"GREEN\",\"foto_i\", bx2\"ogin\":\"BLUE\",\"foto_i\"" +
                         ",\"foto_i\",\"ogin\":\"BLUE\",\"foto_i\"";
            var split = phrase.Split(new[] { "\"" }, StringSplitOptions.RemoveEmptyEntries);
            Console.WriteLine(string.Join(", ", split.Where(s => words.Contains(s))));
        }
    }
}
0

Dzięki za kolejną odpowiedź. Tyle, że jest problem, ja nie znam string'ów RED, GREEN, BLUE
String'i pomiędzy ogin, a foto_i są różne i się nie powtarzają.

1

Skoro ogin i foto_i są stale to:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Soft
{
    class Program
    {
        static void Main(string[] args)
        {
            var phrase = "ogin\":\"RED\",abcxsu\"foto_i\", aa1 \"ogin\":\"GREEN\",\"foto_i\", bx2\"ogin\":\"BLUE\",\"foto_i\"" +
                         ",\"foto_i\",\"ogin\":\"BLUE\",\"foto_i\"";
            var split = phrase.Split(new[] { "ogin\":\"" }, StringSplitOptions.RemoveEmptyEntries);
            Console.WriteLine(string.Join(", ", split.Select(s => s.Remove(s.IndexOf("\"")))));
        }
    }
}

0

Dzięki jeszcze raz grzesiek za pomoc i to szybką pomoc :) Wybacz także za to, że już w 1 poście nie rozjaśniłem wszystkiego ;p

Mam kolejny mały problem. Problem odnosi się do powyższego kodu, więc nie bede specjalnie zakładał nowego tematu.

Kod dokładnie prezentuje się tak:

var phrase = elem.InnerHtml;
                var split = phrase.Split(new[] { "ogin\":\"" }, StringSplitOptions.RemoveEmptyEntries);
                string L_subs = (string.Join(",", split.Select(s => s.Remove(s.IndexOf("\"")))));
                string[] subs = L_subs.Split(',');
                foreach (var sub in subs)
                {
                    try
                    {
                        using (StreamReader sr = new StreamReader("plik.txt"))
                        {
                            String line = sr.ReadToEnd();
                            if (line.Contains(sub))
                            {
                                btn_start_Click(sender, e);
                            }
                            else
                            {
                                if (sub != "{")
                                {
                                    page_num = 0;
                                    listBox1.Items.Add(sub);
                                    lbl_lbcount.Text = listBox1.Items.Count.ToString();
                                    tim_select.Start();
                                }
                            }
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Nie odnaleziono pliku tekstowego", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }

Problem z powyższym kodem jest taki, że jeżeli program odnajdzie w pliku choć jeden sub z subs to uruchamia btn_start, a ja chciałbym, aby uruchamiał btn_start dopiero po odnalezieniu wszystkich subs.
Z góry dziękuję za pomoc :)

1

No to licz sobie gdzieś na boku odnalezione subs i jeżeli liczba będzie w końcu odpowiadała subs.Length to odpal metodę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1