1

Есть задача:

Найти определенную строку и вырезать оттуда 4-х значный идентификатор.

Попытка реализации:

string source = reader.ReadToEnd();
int findIndex = source.IndexOf("Логин_Пользователь"); // индекс = 408694
int y = source.Length; // посмотрел общую размерность source = 443406

var h = source[findIndex]; // тут я проверял что возможно получить значение строки по индексу (Получили 'Л') var z = source[findIndex-62] // тут тоже есть значение '<'

source = source.Substring(findIndex - 62, findIndex); // вырезаем из общего html строку в которой будем искать идентификатор // и именно тут выходит ошибка // > System.ArgumentOutOfRangeException: "Индекс и длина должны указывать на позицию в строке.

source = source.Substring(source.IndexOf("param1=")+7, 4); // исходя из полученой ранее строки, вырезаем 4 знака после param1=

Console.WriteLine(source); // должны получить идентификатор состоящий из 4 знаков

К сожалению, не могу понять почему в моей реализации возникает такая ошибка, ведь индекс и длина действительно указывают на позицию в строке (это было проверено в переменных var h и var z)

При этом, если в Substring использовать индексы меньшей длины например так:

source = source.Substring(11186 - 62, 11186)

Ошибки не произойдёт и значение будет получено.

Прошу подскажите чего я не замечаю/не понимаю.

Ранее меня отсылали на статью Как распарсить HTML в .NET? и закрыли статью. Не совсем понял в чём была причина, поэтому убрал все тэги связанный с парсингом и html, поскольку считаю, что у меня вопрос именно по работе с методом Substring ( о чем я описал в заголовке ), а не конкретно с парсингом.

ovrolg
  • 35

1 Answers1

1
source = source.Substring(findIndex - 62, 62);

Второй парaметр - длина вырезки, а не индекс, до которого резать.

https://docs.microsoft.com/en-us/dotnet/api/system.string.substring?view=netframework-4.8#System_String_Substring_System_Int32_System_Int32_

  • прошу прощения за такой глупый вопрос, видимо нужно больше спать ведь я сам пару раз читал статью, которую вы скинули. – ovrolg Mar 28 '20 at 12:36
  • в любом случае спасибо! это помогло – ovrolg Mar 28 '20 at 12:36