Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2019, 15:29   #1
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
Вопрос Как сделать лучше?

Код:
TestLoad := TStringList.create; 
testload1 := TStringList.Create; 
TestLoad.LoadFromFile('1.txt'); 
TestLoad1.LoadFromFile('2.txt'); 

JSON := TJSONObject.Create; 
JSON.Parse(TEncoding.UTF8.GetBytes(TestLoad.Text), 0); 
JSONArray := JSON.Values['response'].AsType<TJSONArray>; 
JsonArrEnum := JSONArray.GetEnumerator; 

JSON1 := TJSONObject.Create; 
JSON1.Parse(TEncoding.UTF8.GetBytes(TestLoad1.Text), 0); 
JSONArray1 := JSON1.Values['response'].AsType<TJSONArray>; 
JsonArrEnum1 := JSONArray1.GetEnumerator; 

while JsonArrEnum.MoveNext do 
begin 
JsonArrEnum1.MoveNext; 
if JSONArrEnum1.Current.Value <> JSONArrEnum.Current.Value then 
begin 
if Pos(JsonArrEnum1.Current.Value, TestLoad.Text) = 0 then 
Writeln('Нашли его :' + JSONArrEnum1.Current.Value); 
end; 
end;
Процесс поиска и сравнения долговат, есть у кого идея получше?
Мне нужно сделать проверку наличие значения в массиве Jsonarr, думаю понятно.

Последний раз редактировалось NotHerald; 31.07.2019 в 16:46.
NotHerald вне форума Ответить с цитированием
Старый 31.07.2019, 15:50   #2
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
По умолчанию

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

мне кажется Pos моросит и подтупливает проходимость, но как по другому?

Код:
    while JsonArrEnum1.MoveNext do
    begin
        if Pos(JsonArrEnum1.Current.Value, TestLoad.Text) = 0 then
          Writeln('Нашли его :' + JSONArrEnum1.Current.Value);
    end;
NotHerald вне форума Ответить с цитированием
Старый 31.07.2019, 16:34   #3
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
По умолчанию

Нашел пару функций которые вроде мне и нужны, только во первых они работают чуть по другому ищут заголовок пары, а мне нужно сравнивать значение

Код:
for m := 0 to (JsonArray.Get(i) as TJSONObject).Size-1 do ShowMessage((JsonArray.Get(i) as TJSONObject).Get(m).ToString);
Код:
for m := 0 to (JsonArray.Get(i) as TJSONObject).Size-1 do ShowMessage((JsonArray.Get(i) as TJSONObject).Get(m).JsonString.Value);
NotHerald вне форума Ответить с цитированием
Старый 31.07.2019, 16:36   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А принудительный выход из цикла при удачном поиске? Ну и найдено если Pos > 0. Или 1 если обязательно с начала строки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.07.2019 в 16:38.
Аватар вне форума Ответить с цитированием
Старый 31.07.2019, 16:40   #5
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
По умолчанию

Нашел тему на форуме с тем что мне нужно
а именно проверка наличие элемента в Json
но и даже так я не понимаю, она работает так же как мне и не нужно, блин меня это просто бесит, мне нужно элементарно проверить наличие значение в json и у меня это тупо не получается сделать нормально, а ответы которые нашли юзеры не подходят мне

Код:
    jsValue := jsObject.GetValue('ping');
    // if Assigned(jsObject.GetValue('ping')) then
    if Assigned(jsValue) then
    begin
      // iPingValue := StrToInt(jsValue.Value);
      if StrToInt(jsValue.Value) = 0 then
        Self.Send := GetNetMessagePong;
    end;
NotHerald вне форума Ответить с цитированием
Старый 31.07.2019, 16:41   #6
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А принудительный выход из цикла при удачном поиске? Ну и найдено если Pos > 0. Или 1 если обязательно с начала строки
дело не в выходе цикла, айди спрятан в 80-70 тысячной позиции
он находит ее не очень таки быстро ~ около 8 минут
NotHerald вне форума Ответить с цитированием
Старый 31.07.2019, 17:22   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
мне кажется Pos моросит и подтупливает проходимость, но как по другому?
а зачем много-много раз заново считать полный текст
Код:
while ...
   Pos(JsonArrEnum1.Current.Value, TestLoad.Text) = 0 ) then
Код:
s:=TestLoad.Text;//ВЫЧИСЛИЛИ один раз и ...
while ...
  Pos(,,,, s )=0
аналогичное решение и ...
https://www.programmersforum.ru/show...Text%3B&page=2
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.07.2019, 17:27   #8
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
а зачем много-много раз заново считать полный текст
Код:
while ...
   Pos(JsonArrEnum1.Current.Value, TestLoad.Text) = 0 ) then
Код:
s:=TestLoad.Text;//ВЫЧИСЛИЛИ один раз и ...
while ...
  Pos(,,,, s )=0
аналогичное решение и ...
https://www.programmersforum.ru/show...Text%3B&page=2
Мне понравилось, скорость улучшилось, но все же может как то быстрей через проверку элемента в массиве json?
NotHerald вне форума Ответить с цитированием
Старый 31.07.2019, 18:44   #9
NotHerald
 
Регистрация: 18.02.2018
Сообщений: 7
По умолчанию

Уже не актуально, всем спасибо за внимание.
NotHerald вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше сделать? ak167 PHP 1 14.12.2018 08:19
как лучше сделать yuta_86 SQL, базы данных 0 26.09.2012 09:48
Как лучше сделать отчёт SashaS Microsoft Office Excel 1 18.03.2012 14:58
В чем лучше сделать? KinderX SQL, базы данных 0 26.07.2009 12:22
Подскажите как лучше сделать Gendolff БД в Delphi 1 10.02.2007 08:47