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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2015, 13:15   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
Лампочка помогите дописать функцию замены порта

примерно так, .. если СОМ4 то СОМ5 результат. Взял массив. Помогите дописать, чтоб заменяла порт

Код:
function DecToCOM(Decimal: String): string;
const
  DefCOM: array[1..50] of string =
  ('COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'COM10', 'COM11', 'COM12', 'COM13', 'COM14', 'COM15',
  'COM16', 'COM17', 'COM18', 'COM19', 'COM20', 'COM21', 'COM22', 'COM23', 'COM24', 'COM25', 'COM26', 'COM27', 'COM28', 'COM29', 'COM30',
  'COM31', 'COM32', 'COM33', 'COM34', 'COM35', 'COM36', 'COM37', 'COM38', 'COM39', 'COM40', 'COM41', 'COM42', 'COM43', 'COM44', 'COM45',
  'COM46', 'COM47', 'COM48', 'COM49', 'COM50');

  NeedCOM: array[1..50] of String =
  ('COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'COM10', 'COM11', 'COM12', 'COM13', 'COM14', 'COM15',
  'COM16', 'COM17', 'COM18', 'COM19', 'COM20', 'COM21', 'COM22', 'COM23', 'COM24', 'COM25', 'COM26', 'COM27', 'COM28', 'COM29', 'COM30',
  'COM31', 'COM32', 'COM33', 'COM34', 'COM35', 'COM36', 'COM37', 'COM38', 'COM39', 'COM40', 'COM41', 'COM42', 'COM43', 'COM44', 'COM45',
  'COM46', 'COM47', 'COM48', 'COM49', 'COM50', 'COM51');
var
  i: Integer;
  scratch: string;
begin
  scratch := '';
  for i := 13 downto 1 do
    while (Decimal >= NeedCOM[i]) do
    begin
//      Decimal := Decimal - NeedCOM[i];
      scratch := scratch + DefCOM[i];
    end;
  Result := scratch;
end;

Последний раз редактировалось beegl; 24.05.2015 в 13:18.
beegl вне форума Ответить с цитированием
Старый 24.05.2015, 13:30   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А покороче никак нельзя, например:
Код:
var DefCOM,NeedCOM:array of string;
    i:integer;
...........
   SetLength(DefCOM,50);
   SetLength(NeedCOM,50);
   For i:=0 to 49 do
   begin
      DefCOM[i]:='COM'+IntToStr(i+1);
      NeedCOM[i]:='COM'+IntToStr(i+2);
   end;
Цитата:
если СОМ4 то СОМ5 результат
Так что ли:
Код:
   For i:=0 to 49 do
      If Decimal=DefCOM[i] then
      begin
         Result:=NeedCOM[i];
         Exit;
      end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось Stilet; 24.05.2015 в 14:27.
newerow1989 вне форума Ответить с цитированием
Старый 24.05.2015, 13:39   #3
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Так что ли:
Код:
   For i:=0 to 49 do
      If Decimal=DefCOM[i] then
      begin
         Result:=NeedCOM[i];
         Exit;
      end;
так будет заменять?

Код:
function DecToCOM(Decimal: String): string;
var
  i: Integer;
  DefCOM,NeedCOM:array of string;
begin
   SetLength(DefCOM,50);
   SetLength(NeedCOM,50);
      For i:=0 to 49 do
      If Decimal=DefCOM[i] then
      begin
         Result:=NeedCOM[i];
         Exit;
      end;
end;
не заменяет, пустое сообщение:

Код:
showmessage(DecToCOM(nrCommTAPI1.Device[SetIndexFx].PortName));

Последний раз редактировалось beegl; 24.05.2015 в 13:41. Причина: add code
beegl вне форума Ответить с цитированием
Старый 24.05.2015, 13:41   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
function DecToCOM(Decimal: String): string;
var
  i: Integer;
  DefCOM,NeedCOM:array of string;
begin
   SetLength(DefCOM,50);
   SetLength(NeedCOM,50);
   For i:=0 to 49 do
   begin
      DefCOM[i]:='COM'+IntToStr(i+1);
      NeedCOM[i]:='COM'+IntToStr(i+2);
   end;
   Result:='';//это если введешь COM542
   For i:=0 to 49 do
      If Decimal=DefCOM[i] then
      begin
         Result:=NeedCOM[i];
         Exit;
      end;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 24.05.2015 в 13:43.
newerow1989 вне форума Ответить с цитированием
Старый 24.05.2015, 14:21   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

Если преобразование настолько линейно:
Код:
function DecToCOM(Decimal: String): string;
var
  i: Integer;
begin
  i := StrToIntDef(copy(Decimal, 4, length(Decimal) - 3), -1);
  if (copy(Decimal, 1, 3) = 'COM') and (i >= 1) and (i <= 50) then
    result := 'COM' + IntToStr(i + 1)
  else
    result := '';
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 24.05.2015, 15:25   #6
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

спасибо большое, получилось, .. протестируйте пожалуйста, не будет ошибок при запуске программы? .. или ещё что-то .. (тестировал на Win XP SP3 и в VirtualBox на Win 8, ошибок нет)

https://sourceforge.net/projects/intertelecomsc/

beegl вне форума Ответить с цитированием
Старый 24.05.2015, 15:41   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Ошибки в Windows 7 Домашняя базовая
Изображения
Тип файла: png Безымянный.png (64.5 Кб, 41 просмотров)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 24.05.2015, 16:00   #8
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
Сообщение

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Ошибки в Windows 7 Домашняя базовая
Спасибо, за помощь в тестировании, и за функцию, преобразования СОМ порта.
Обновил, как сейчас? .. (ссылка 1) или (ссылка 2)

И ещё такой вопрос, у Win 7, может быть такое, что не показывает Аренду соединения?

ipconfig /allcompartments /all
или ipconfig /all

здесь спрашивал: (ссылка)
beegl вне форума Ответить с цитированием
Старый 24.05.2015, 16:07   #9
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Та же самая ошибка
Цитата:
у Win 7, может быть такое, что не показывает Аренду соединения?
У меня нету такого (при USB-модеме)
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 24.05.2015 в 16:18.
newerow1989 вне форума Ответить с цитированием
Старый 24.05.2015, 16:27   #10
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
У меня нету такого (при USB-модеме)
а в командной строке также не показывает Аренду? .. вот это из-за этого наверное ошибка. Придётся искать новый алгоритм поиска Аренды, пока только через командную строку беру)
beegl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, как дописать одну функцию для моего Дерева пожалуйста Teropan231 Общие вопросы C/C++ 0 18.10.2013 00:13
Как переделать функцию замены слов в тексте? artemavd Общие вопросы Delphi 4 29.05.2012 17:37
Как настроить функцию поиска и замены alexp21 Microsoft Office Excel 1 03.04.2012 15:03
Дописать функцию последняя строка kipish_lp Microsoft Office Excel 5 05.07.2010 07:12
Требуется дописать функцию сохранения картинки -SG- Помощь студентам 2 04.06.2010 15:44