Перейти к содержанию
Fire Monkey от А до Я
  • 0

Работа с текстом


serg557

Вопрос

День добрый!

Ситуация такова:

1. Загружаю вебстраничку в AnsiString - тут все отлично работает как на винде так и под андроид;

2. Пытаюсь ее отпарсить с использованием стандартных методов AnsiString- .Pos(), .SubString(), .Delete(), - на винде все работает - на андроиде -нет.

 Вопрос в следующем - чем работать на с текстом - чтобы одинаково работало под андроидом?

 

 Form2->Page=IdHTTP1->Get("http://minfin.com.ua/currency/mb/");

 Page.Delete(1,Page.Pos("<td  class=\"active\">")+19);
 Memo1->Text=Page.SubString(1,Page.Pos("<")-1);

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Windowse нумерация индексов String а начинается 1, а в андроиде с 0. Может поможет.

Наверно нужно изменит так:

 Page.Delete(0,Page.Pos("<td  class=\"active\">")+18);
 Memo1->Text=Page.SubString(0,Page.Pos("<")-2);
А так незнаю.
Просто сами учтите что в андроиде индексация начинается с 0.
Изменено пользователем Axbor
Ссылка на комментарий
  • 0

При работе с текстами на разных языках, есть несколько правил в зависимости от того, что Вам нужно:

1. Пользуйтесь string 

2. Используйте функции AnsiToUTF8, UTF8ToAnsi

3. Используйте кодировку UTF8 в текстовых файлах.

Ссылка на комментарий
  • 0
  • Модераторы

 

Windowse нумерация индексов String а начинается 1, а в андроиде с 0. Может поможет.

Наверно нужно изменит так:

 Page.Delete(0,Page.Pos("<td  class=\"active\">")+18);
 Memo1->Text=Page.SubString(0,Page.Pos("<")-2);
А так незнаю.
Просто сами учтите что в андроиде индексация начинается с 0.

 

для System.Delete нужно использовать 1, а не 0

неважно на какой платформе это будет работать

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
  • Модераторы

При работе с текстами на разных языках, есть несколько правил в зависимости от того, что Вам нужно:

1. Пользуйтесь string 

2. Используйте функции AnsiToUTF8, UTF8ToAnsi

3. Используйте кодировку UTF8 в текстовых файлах.

использовать нужно класс TEncoding и не прибегать к таким функциям как в пункте 2

/// //////////////////////////////////////////////////////////////////
function myUTF8ToString(aStr: String): string;
// uses System.NetEncoding
var
  Data: TEncoding;
  StrArray: TBytes;
begin
  Data := TEncoding.Create;
  try
    try
      StrArray := BytesOf(aStr);
      Result := StringOf(Data.Convert(Data.UTF8, TEncoding.Default, StrArray));
    except
      Result := aStr;
    end;
  finally
    FreeAndNil(Data);
  end;
end;
/// //////////////////////////////////////////////////////////////////

function myStringToUTF8(aStr: String): string;
// uses System.NetEncoding
var
  Data: TEncoding;
  StrArray: TBytes;
begin
  Data := TEncoding.Create;
  try
    try
      StrArray := BytesOf(aStr);
      Result := StringOf(Data.Convert(Data.Default, TEncoding.UTF8, StrArray));
    except
      Result := aStr;
    end;
  finally
    FreeAndNil(Data);
  end;
end;
Ссылка на комментарий
  • 0

Вопрос решен!

Всем спасибо за советы.

Конечный кусок кода прилагаю-вдруг кому пригодится.

String Page;

  Form1->Page=IdHTTP1->Get("http://minfin.com.ua/currency/mb/");
  Page.Delete0(0,Page.Pos0("<td  class=\"active\">")+20);
  Memo1->Text=Page.SubString0(0,Page.Pos0("<")-1);
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...