Не постоянная ошибка в сниппете

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
Есть часть кода
C#:
var last_seen = Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim();
    long time = DateTimeOffset.Now.ToUnixTimeSeconds() - int.Parse(last_seen);
Иногда приходи такой гет ответ (формат Json), что сниппет не может обработать его и выдает ошибку "Входная строка имела неверный формат."
Как дописать эту часть кода, чтобы при ошибке сниппет просто удалял кривую строку (или параметр) и продолжал парсить
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
в try{}catch{} оберни проблемную строку
Там большой массив данных который обрабатывает сниппет, очень тяжело найти из-за чего конкретно выбивает на ошибку, нужен код чтобы при ошибке продолжил работать, а проблемную строку убрал
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
Там большой массив данных который обрабатывает сниппет, очень тяжело найти из-за чего конкретно выбивает на ошибку, нужен код чтобы при ошибке продолжил работать, а проблемную строку убрал
да причем тут данные ? :-)
я говорю код оберни. вот так
C#:
var last_seen = "";
try{ last_seen = Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim();} catch{}
в catch можешь написать что надо иметь в переменной если в try ошибка будет. например last_seen= "упс!"; :-) ну или last_seen= 38434873487; ну я не знаю же что там у тебя за логика дальше :-)
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
да причем тут данные ? :-)
я говорю код оберни. вот так
C#:
var last_seen = "";
try{ last_seen = Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim();} catch{}
в catch можешь написать что надо иметь в переменной если в try ошибка будет. например last_seen= "упс!"; :-) ну или last_seen= 38434873487; ну я не знаю же что там у тебя за логика дальше :-)
Сделал вот так, все равно выдает ошибку "Входная строка имела неверный формат."
C#:
var last_seen = "";
    try{ last_seen = Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim();} catch{}
    long time = DateTimeOffset.Now.ToUnixTimeSeconds() - int.Parse(last_seen);
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
эх.... этож пример только, ладно давай подробно :-)
long time = DateTimeOffset.Now.ToUnixTimeSeconds() - int.Parse(last_seen); эта строка что делает и что должно тут высчитаться если будет все хорошо и что должно быть если будет ошибка при парсе ?
соотвестыующий вопрос по int.Parse(last_seen) что здесь должно быть ? при var last_seen = ""; конечно там будут ошибки. а начальное значение надо выставлять зная ответ на первый вопрос.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
эх.... этож пример только, ладно давай подробно :-)
long time = DateTimeOffset.Now.ToUnixTimeSeconds() - int.Parse(last_seen); эта строка что делает и что должно тут высчитаться если будет все хорошо и что должно быть если будет ошибка при парсе ?
соотвестыующий вопрос по int.Parse(last_seen) что здесь должно быть ? при var last_seen = ""; конечно там будут ошибки. а начальное значение надо выставлять зная ответ на первый вопрос.
long time = DateTimeOffset.Now.ToUnixTimeSeconds() это кодировка времени в формате Unix (гет ответ приходит в такой кодировки)
ответ приходит в формате Json и из него парсится параметр "last_seen.time"

Пример Json
48090
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
C#:
long time = DateTimeOffset.Now.ToUnixTimeSeconds();
try{time = time - int.Parse(Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim());}
catch{ time = long.MinValue }
if (time == long.MinValue){
    // что делаем если все плохо
}
// все хорошо, пашем дальше
попробуй этот вариант
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
C#:
long time = DateTimeOffset.Now.ToUnixTimeSeconds();
try{time = time - int.Parse(Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim());}
catch{ time = long.MinValue }
if (time == long.MinValue){
    // что делаем если все плохо
}
// все хорошо, пашем дальше
попробуй этот вариант
Все равно выдает ошибку "Входная строка имела неверный формат."
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
А что такое
if (time == long.MinValue) ? Убрал эту строку вроде все заработало
это проверка на ошибку в блоке try , это значение устанавливается в блоке catch соответственно если условие будет выполняться то try не отработал как надо.
точка с запятой пропущена была. попробуй вот так и где плохо там что нибудь свое поставь. выход что ли или сообщение какое нибудь.
C#:
long time = DateTimeOffset.Now.ToUnixTimeSeconds();
try{time = time - int.Parse(Regex.Match(line, @"(?<=time"":)\d+.*?").Value.Trim());}
catch{ time = long.MinValue; }
if (time == long.MinValue){
    // что делаем если все плохо
}
// все хорошо, пашем дальше
 

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)