ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
[Delphi] Вопрос на засыпку 2 |

04.03.2010, 02:51
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
[Delphi] Вопрос на засыпку 2
конечно туповато такое спрашивать, однако мне нужна помощь ваша. вопрос. Как с помощью операторов Copy, Pos, Delete, Length сделать список из этого?
Код:
{"countries":[[19,"Австралия"],[20,"Австрия"],[5,"Азербайджан"],[21,"Албания"],[22,"Алжир"],[23,"Американское Самоа"],[24,"Ангилья"],[25,"Ангола"],[26,"Андорра"],[27,"Антигуа и Барбуда"],[28,"Аргентина"],[6,"Армения"],[29,"Аруба"],[30,"Афганистан"],[31,"Багамы"],[32,"Бангладеш"],[33,"Барбадос"],[34,"Бахрейн"],[3,"Беларусь"],[35,"Белиз"],[36,"Бельгия"],[37,"Бенин"],[38,"Бермуды"],[39,"Болгария"],[40,"Боливия"]
RegExpr не предлогать))
|
|
|

04.03.2010, 03:44
|
|
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме: 4761503
Репутация:
229
|
|
Код (в коде думаю ты сам разберешься, а если не сможешь разобраться -> моя личка открыта):
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
s:string;
current_int, current_name:string;
goroda:array [1..100] of string;//за назв. переменной не ругать :D
begin
s:='{"countries":[[19,"Австралия"],[20,"Австрия"],[5,"Азербайджан"],[21,"Албания"]';
delete(s, 1, 14);
while 1<>2 do
begin
current_int:=copy(s, pos('[', s)+1, pos(',', s)-1-pos('[', s));
current_name:=copy(s, pos('"', s)+1, pos('"]', s)-1-pos('"', s));
goroda[strtoint(current_int)]:=current_name;
if length(s)-pos('"]', s)=1 then
begin
break;
end
else
begin
delete(s, 1, 1+length(current_int)+2+length(current_name)+3);
end;
end;
end;
Последний раз редактировалось wolmer; 05.04.2010 в 21:34..
|
|
|

04.03.2010, 10:57
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
|
|
|

04.03.2010, 11:42
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
Сообщение от GhostOnline
Интересно, почему?
зачем мне RegExpr для таких протстых операций?))
|
|
|

04.03.2010, 12:07
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Сообщение от RedFern.89
конечно туповато такое спрашивать, однако мне нужна помощь ваша. вопрос. Как с помощью операторов Copy, Pos, Delete, Length сделать список из этого?
Какого вида список нужно сделать?
|
|
|

04.03.2010, 12:22
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
при загрузке больших данных, вылетает с ошибкой is not valid integer value. я попробую сам разобраться. спасибо!
|
|
|

04.03.2010, 12:23
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
Сообщение от M_script_
Какого вида список нужно сделать?
просто список стран в столбик))
|
|
|

04.03.2010, 12:29
|
|
Участник форума
Регистрация: 20.12.2008
Сообщений: 277
Провел на форуме: 828081
Репутация:
84
|
|
Сообщение от RedFern.89
зачем мне RegExpr для таких протстых операций?))
Ога, для таких простых операций есть же античат
|
|
|

04.03.2010, 12:35
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
я могу и сам это сделать. друзей вк получилось разделить)) ну если тебе в лом помочь мне - ладно. я пойму, но наезжать то зачем?
|
|
|

04.03.2010, 13:09
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Вот решение с помощью TStringList:
Код:
AnsiString sTemp = "";
TStringList* CountryList = new TStringList;
sTemp = "{\"countries\":[[19,\"Австралия\"],[20,\"Австрия\"],[5,\"Азербайджан\"],[21,\"Албания\"],[22,\"Алжир\"],[23,\"Американское Самоа\"],[24,\"Ангилья\"],[25,\"Ангола\"],[26,\"Андорра\"],[27,\"Антигуа и Барбуда\"],[28,\"Аргентина\"],[6,\"Армения\"],[29,\"Аруба\"],[30,\"Афганистан\"],[31,\"Багамы\"],[32,\"Бангладеш\"],[33,\"Барбадос\"],[34,\"Бахрейн\"],[3,\"Беларусь\"],[35,\"Белиз\"],[36,\"Бельгия\"],[37,\"Бенин\"],[38,\"Бермуды\"],[39,\"Болгария\"],[40,\"Боливия\"]";
sTemp.Delete(1, sTemp.Pos("[")); // удаляем лишнее
CountryList->Delimiter = ','; // указываем разделитель
CountryList->DelimitedText = sTemp; // текст разбивается на строки, разделителем считаются кавычки и запятая
for(int i=0; i < CountryList->Count; ++i) // перебираем все полученные строки
if(CountryList->Strings[i].Pos("[") || CountryList->Strings[i].Pos("]")) // если в строке есть квадратные скобки, удаляем ее
CountryList->Delete(i--);
Memo1->Lines->AddStrings(CountryList); // выводим список в мемо
Edit1->Text = CountryList->CommaText; // или в едит через запятую
delete CountryList;
Переписать с сиплюса на делфи не сложно.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|