To znaczy, że niczego nie szukasz - to nie jest błąd.
Chyba nie rozumiesz. Ja przeszukuje string w poszukiwaniu KAŻDEJ wartości, której nagłówek jest mi potrzebny. Może lepiej na przykładzie:
- Kod: Zaznacz cały
String^ s = yyx <header = "cos"; value = "">
// Wtedy zapisze jako Find_Beetewen(s, "\"; value = \"", "\">");
Czy to będzie poprawne ? Tak. Czy wyrażenie jest błędne ? Nie, bo nie wiem czy value będzie miało jakąś wartość czy nie. To się okaże podczas pracy programu, a funkcja nie może interpretować pustego ciągu jak błędu, a błędu jako pusty ciąg, a Twój zapis właśnie to oznacza.
A co w Twoim rozumieniu znaczy nie spełnia kryteriów? Jedynym przypadkiem, kiedy funkcja mogłaby rzucić wyjątkiem, jest sytuacja, gdy start_string lub end_string będą puste.
lub end_string występuje przed start_string.
W przypadku mojego programu takie szczegóły są bardzo ważne. Funkcje Find_Beetwen są najczęściej zagnieżdżanie. To nie takie proste jak mówisz, bo wartości są nie do przewidzenia. Np. co jeśli oprócz wartości również nagłówek ma inną nazwę ? Co jeśli wcześniej występuje nazwa nagłówka + wartość, ale nie tak która jest potrzebna ? A ja muszę się tym zając, znaleźć i wyciąć to co odpowiednie, bo pomyłka oznacza błąd w całości. Szczegółów nie będę przybliżał.
Teraz mam problem z tym, że jak przeprawiłem tą funkcję by działa poprawnie, to przestała działać inna funkcja, która ją wykorzystywała, bo jak się okazało, ten błąd był "korzystny".
To jest niemożliwe. Pokaż funkcję, która daje taki wynik.
String^ Data::Find_Between(String^ search_data, String^ start_string, String^ end_string)
{
int s1 = search_data->IndexOf(start_string);
int s2 = search_data->IndexOf(end_string, s1);
int s3 = start_string->Length;
return search_data->Substring(s1, s2 - s1);
//return search_data->Substring(s1 + s3, (s2 - (s1 + s3))); // to należy do mnie, na górze jest Twój "return"
}
MessageBox::Show(Data::Get()->Find_Between("Test uaktualnienia systemu aktual XP nie wykrył niezgodności ani problemów.", "uaktualnienia", "aktual"));
// efekt = "u";