Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Сообщение son » 15.11.2014 16:31:18

Здравствуйте. В Lazarus (может в этом проблема) пишу парсер xml. В тексте Есть:

name="ОЭС Урала"
name="ОЭС Средней Волги"
name="ОЭС Юга"
name="ОЭС Северо-Запада"
name="ОЭС Центра"
name="ОЭС Сибири"


Если к нему применяю выражение :

name="[А-яЁё\s]+

то получаю такой результат:

name="ОЭС У
name="ОЭС С
name="ОЭС Юга
name="ОЭС Севе
name="ОЭС Цен
name="ОЭС Сиби


Подскажите пожалуйста где я мог ошибиться?
son
новенький
 
Сообщения: 39
Зарегистрирован: 22.11.2011 11:50:58

Re: Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Сообщение Little_Roo » 15.11.2014 17:49:35

son писал(а):Если к нему применяю выражение :

name="[А-яЁё\s]+


Куда применяю, как, каким макаром????
Кусок этого, так называемого выражения, это нормально???

Может быть подробности раскроете, а то "телепаты в отпуске" (с) местное :shock:
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Сообщение son » 15.11.2014 18:19:08

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var _tempFile:TStringList; _regexp:TRegExpr; i, b:integer;

begin
  //Инициализируем объекта для работы с регулярными выражениями
ListBox1.Clear;
ListBox2.Clear;
Memo2.Clear;
_regexp:=TRegExpr.Create; //Устанавливаем шаблон поиска в зависимости от условия.
_regexp.Expression:=edit1.Text;
for i:=0 to memo1.Lines.Count-1 do begin
  ListBox2.Items.Add(inttostr(i));
  if (_regexp.Exec(memo1.Lines.Strings[i])) then
  repeat
    memo2.Lines.Add(memo1.Lines.Strings[i]);
    ListBox1.Items.Add(_regexp.Match[0]);
  until not _regexp.ExecNext;
end; //Освобождаем память
_regexp.Free;
end;     


пример xml который парсю:

<?xml version="1.0" encoding="Windows-1251"?><report type="oes-buy-volumes" interval-type="hour"><defs> <data name="tg_volume">Объем покупки, МВт.ч</data> <data name="tg_price">Индекс равновесных цен на покупку электроэнергии, руб./МВт.ч.</data> <data name="tg_price_sell">Индекс равновесных цен на продажу электроэнергии, руб./МВт.ч.</data> <data name="max_tg_price">Максимальный индекс равновесной цены, руб./МВт.ч</data> <data name="min_tg_price">Минимальный индекс равновесной цены, руб./МВт.ч</data> <data name="tg_volume_sell">Объем продажи, МВт.ч</data></defs><oes id="1" name="ОЭС Урала" zone="1"><hour id="0"> <data name="tg_volume"> 28467,111</data> <data name="tg_price"> 830,72</data> <data name="max_tg_price"> 1053,40</data> <data name="min_tg_price"> 647,00</data> <data name="tg_volume_sell"> 29481,060</data> <data name="tg_price_sell"> 799,30</data> </hour><hour id="1"> <data name="tg_volume"> 28335,587</data> <data name="tg_price"> 796,88</data> <data
name="max_tg_price"> 992,98</data> <data name="min_tg_price"> 637,91</data> <data name="tg_volume_sell"> 29144,451</data> <data name="tg_price_sell"> 769,77</data> </hour><hour id="2"> <data name="tg_volume"> 28390,062</data> <data name="tg_price"> 796,08</data> <data name="max_tg_price"> 986,20</data> <data name="min_tg_price"> 642,06</data> <data name="tg_volume_sell"> 29076,018</data> <data name="tg_price_sell"> 769,53</data> </hour><hour id="3"> <data name="tg_volume"> 28694,558</data> <data name="tg_price"> 802,33</data> <data name="max_tg_price"> 994,97</data> <data name="min_tg_price"> 644,59</data> <data name="tg_volume_sell"> 29364,320</data> <data name="tg_price_sell"> 774,36</data> </hour><hour id="4"> <data name="tg_volume"> 29700,458</data> <data name="tg_price"> 861,32</data> <data name="max_tg_price"> 1099,82</data> <data name="min_tg_price"> 679,00</data> <data name


пытаюсь выбрать строки: name="ОЭС Урала"

получаю то что выше писал
son
новенький
 
Сообщения: 39
Зарегистрирован: 22.11.2011 11:50:58

Re: Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Сообщение v-t-l » 17.11.2014 10:07:48

<?xml version="1.0" encoding="Windows-1251"?>

1.Лазарус использует кодировку UTF-8.
2.[А-Яа-яЁё\s]+ тоже.
v-t-l
энтузиаст
 
Сообщения: 741
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Сообщение qivi » 17.11.2014 15:58:23

Код: Выделить всё
UTF8Decode
UTF8Encode
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 227

Рейтинг@Mail.ru
cron