Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки при работе с массивами в Delphi и Python

Delphi , Синтаксис , Массивы

 

Вопрос, поднятый пользователем JGMS, касается работы с массивами в среде Delphi при использовании Python скриптов. Ошибка заключалась в неправильном обращении к элементам массива при выполнении скрипта на Python. Проблема была успешно решена после совета от пользователя pyscripter.

Контекст проблемы

Пользователь JGMS столкнулся с проблемой, при которой, несмотря на корректное заполнение входного массива данными, Python не выполнял никаких действий над данными, и массив возвращался пустым, хотя переменная Result устанавливалась в значение True. Это указывало на то, что скрипт на Python не изменял содержимое массива.

Анализ и предложенное решение

Пользователь pyscripter указал на ошибку в коде: вместо Vertaal.PArr[j, taalnr] следует использовать Vertaal.PArr[j][taalnr]. Также было отмечено, что функция GetVarAsVariant возвращает одномерный массив, содержащий одномерные массивы, что важно учитывать при работе с данными.

Пример кода

var VArr: Variant := VarArrayCreate([0, 1, 0, 1], VarVariant);
VArr[0, 0] := 'I';
VArr[1, 0] := 'You';

PythonModule1.SetVarFromVariant( 'arr', VArr);
...
var VArr := PythonModule1.GetVarAsVariant('arr');
ShowMessage(VArr[1][1]);

Исправленный код пользователя JGMS

После получения совета, пользователь JGMS исправил свой код следующим образом:

PythonModule1.SetVarFromVariant( 'Varr', Arr );

Mem := TStringList.Create;
With Mem DO
begin
  Add('from deep_translator import GoogleTranslator');
  Add('import Varr');
  Add('taalcode = "' + taalcode +'"');
  Add('taalnr = ' + I2S(TaalNr) );
  Add('for j in range(len(Varr)):');
  Add('  translated = GoogleTranslator(source="nl", target=taalcode).translate(text=Varr[j][0])' );
  Add('  Varr[j][taalnr]=translated');
end;
TRY
  GetPythonEngine.ExecString(UTF8Encode(Mem.Text));
  Mem.Free;
  Arr :=  PythonModule1.GetVarAsVariant( 'Varr' ); // Возвращаем параметр VAR вызывающей функции.
END;

Альтернативное решение

В качестве альтернативного решения можно было бы использовать более строгую проверку типов данных и их соответствия ожидаемому формату. Например, перед выполнением скрипта на Python можно было бы проверить, что массив Arr имеет правильные размерности и содержит корректные данные.

Выводы

Пользователю JGMS удалось исправить ошибку в коде, следуя совету от пользователя pyscripter. Важно обращать внимание на синтаксис доступа к элементам массива в Python, а также на особенности работы с массивами в Delphi при взаимодействии с Python скриптами.

Создано по материалам из источника по ссылке.

Описание контекста: Пользователь JGMS столкнулся с проблемой в работе Python скриптов в среде Delphi при обработке массивов, которая была решена после корректировки доступа к элементам массива в скрипте.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-22 11:52:13/0.0035750865936279/0