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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2013, 22:50   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Pos со смещением не работает

Добрый день, не могу понять почему не правильно работает функция Pos

Обрабатываю такую строку
Код:
'47172402,79600893997,0.29,2'#$A
Код:
  s := IdHTTP1.Get(s) + #10;
  PosIdx := 0;
  while Pos(#10, s, PosIdx) <> Length(s) do
  begin
    // присваиваем ади со сдвигом равным найденому последнему символу перехода строки
    sID := copy(s, 1, Pos(',', s, PosIdx));
    PosIdx := Pos(#10, s, PosIdx);
    sStatus := copy(s, PosIdx - 1, 1);
    Memo2.Lines.Add(sID + ' | ' + sStatus);
  end;
Цикл потому что таких строк мб несколько.
Проблема собственно в том что что если я пишу Pos(',', s, PosIdx), то постоянно возвращает 0 если пишу Pos(',', s) то всё норм возвращает 9!
Вы скажите юзай PosEx, но с с ней таже беда, постояно результат 0, да и потом я посмотрел, PosEx это ссылка на функцию Pos, так что смысла не вижу, и Pos допускает вводить третий параметр...

Плз хелп)
Dozent вне форума Ответить с цитированием
Старый 26.11.2013, 22:55   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

PosEx вместо Pos. А что это за формат Pos с 3-им параметром?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.11.2013, 22:59   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

смысл если Ctrl+Click приводит из моего юнита в unit System.StrUtils в функцию
Код:
function PosEx(const SubStr, S: string; Offset: Integer): Integer;
begin
  Result := System.Pos(SubStr, S, Offset);
end;
ну а дальше
unit System;
Код:
function Pos(const SubStr, Str: _ShortStr; Offset: Integer): Integer;
{$IFDEF PUREPASCAL}
var
  I, LIterCnt, L, J: Integer;
  PSubStr, PS: _PAnsiChr;
begin
  L := _PStrLen(SubStr);
если и то и то приводит к одному результату, смысл юзать промежуточную функцию?
Dozent вне форума Ответить с цитированием
Старый 26.11.2013, 23:03   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А, это в XE смещение добавили. Дык может смещение не то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.11.2013, 23:05   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну у меня ХЕ4, а какое тогда смещение?
Dozent вне форума Ответить с цитированием
Старый 26.11.2013, 23:10   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну какого оно вообще начальное с нуля? У строк отчет с 1 идет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.11.2013, 23:16   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ДА спасибо разобрался)

Код:
    s := IdHTTP1.Get(s) + #10;
  PosIdx := 1;
  while Pos(#10, s, PosIdx) > 0 do
  begin
    // присваиваем ади со сдвигом равным найденому последнему символу перехода строки
    sID := copy(s, PosIdx, Pos(',', s, PosIdx) - PosIdx);
    PosIdx := Pos(#10, s, PosIdx) + 1;
    if copy(s, PosIdx - 3, 1) = ',' then
      sStatus := copy(s, PosIdx - 2, 1)
    else
      sStatus := copy(s, PosIdx - 3, 2);
    Memo2.Lines.Add(sID + ' | ' + sStatus);
  end;;

Последний раз редактировалось Dozent; 27.11.2013 в 23:43. Причина: Дополнение кода
Dozent вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Kопировать ячейки со смещением Andrej092 Microsoft Office Excel 7 09.11.2013 17:15
МАКРОС СО СМЕЩЕНИЕМ EXEL 2003 Ирина Розанова Microsoft Office Excel 13 07.09.2012 00:05
сегодняшняя дата со смещением +3 дня xrob PHP 5 08.01.2012 09:28
Несколько графиков в DBCHART со смещением mikoni Компоненты Delphi 0 21.05.2010 13:17
Проблема с дельта смещением un07 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 25.03.2009 10:11