Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    folta

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Подробнее...
    получить в массив числа 49,492,13,1380,8049,49.
     
    программа не моя. она слушает порт и выдает лог.
    пример под тегом.
    каждое новое число нужное для занесения в массив начинается с новой строки.
    как добавочное, в логе могут присутствовать что-то кроме целых чисел, но они не нужно.
     
     

    Всего записей: 1177 | Зарегистр. 24-11-2010 | Отправлено: 17:31 08-12-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    folta
    глянь...

    Код:

    {$APPTYPE CONSOLE}
     
    uses
      SysUtils;
     
    var
      str: string;
      nKeys: integer;
      keys: array of integer;
      fp: text;
      itmp, i: integer;
    begin
      nKeys := 0;
      setlength(Keys, 100000); // не очень красиво, но сойдёт...  
      assignfile(fp, 'test.txt');
      reset(fp);
      while not eof(fp) do begin
        readln(fp, str);
        writeln(str);
        str := trim(str);
        if (str = '') then continue;
        try
          itmp := StrToInt(str);
          Keys[nKeys] := itmp;
          inc(nKeys);
        except
        end;
      end;
     
      closefile(fp);
     
      setlength(Keys, nKeys); // realloc
      writeln('nKeys = ', nKeys);
      for i := 0 to (nKeys-1) do
        writeln(Keys[i]);
     
      setlength(Keys, 0); // free
    end.

    Всего записей: 24263 | Зарегистр. 06-12-2002 | Отправлено: 19:02 08-12-2012
    folta

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    уфф...проверял в критических условиях.
    работает.
    только изменил переменную
      fp: text; >> f: TextFile;
    надеюсь оно можно так.
    все замечательно.
    только консоль не понимаю, расшифровку.
    открываю файл, в консоли содержимое-потом переменная 'nKeys=1'-дубль содержимого, без лишнего.
    пример:
    Подробнее...

    Всего записей: 1177 | Зарегистр. 24-11-2010 | Отправлено: 20:27 08-12-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    folta

    Цитата:
    только консоль не понимаю, расшифровку.
    открываю файл, в консоли содержимое-потом переменная 'nKeys=1'-дубль содержимого, без лишнего.  
    это через переводчик что ли пропущено?
     
    это выдача на экран для контроля, убери все writeln() -- будет тихо...

    Всего записей: 24263 | Зарегистр. 06-12-2002 | Отправлено: 20:53 08-12-2012
    folta

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    все красиво.
    просто я не знал как контролировать ход работы и прикладывал label или showmessage)
     
    так, тут о TChar. не велите казнить.
    что тут не так? надо по другому инициировать массив?!
    или вообще я "нарубил"?
    а может можно как не через код, а через TChar'овскую форму добавлять напрямую данные массива? но там только функции...
    Подробнее...
     

    Всего записей: 1177 | Зарегистр. 24-11-2010 | Отправлено: 13:53 09-12-2012 | Исправлено: folta, 17:05 09-12-2012
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Всем привет! Появилась проблема с распаковкой Tak/OptimFROG в Delphi. Нашел заголовки в компоненте NewAC. Но ни черта не понял, что да как там. Например, по идее всё должно работать в этом коде, но выходной размер wav'ки 0 Кб:
    Код

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 14:09 09-12-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    folta
    Вы вообще в курсе про область видимости переменных?

    Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 20:20 09-12-2012 | Исправлено: Frodo_Torbins, 20:21 09-12-2012
    folta

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    объявляя её в одной процедуре, она заканчивается c end. так?!
    посмотрел в нете...
    ага!

    Цитата:
    private
    { Private declarations }
    public
    { Public declarations }

    спасибо.  
    вот так и живу.
     
     
     
    Добавлено:
    и interface

    Всего записей: 1177 | Зарегистр. 24-11-2010 | Отправлено: 22:25 09-12-2012
    alex1334

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    folta
    У меня компилятор требует конец процедуры в виде end;
     
    Завершение end.  это конец модуля. Весь текст за этим оператором игнорируется и в исполняемый файл не включается

    Всего записей: 148 | Зарегистр. 10-10-2010 | Отправлено: 23:09 09-12-2012
    folta

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alex1334
    да не, точку я не к месту поставил.
     
    что-то перегрузил я что-то,
    не пропускает

    Цитата:
     Series1.AddArray(gfx);

     E2250 There is no overloaded version of 'AddArray' that can be called with these arguments
    вот все. nKey объявлена в private
    Подробнее...

    Всего записей: 1177 | Зарегистр. 24-11-2010 | Отправлено: 16:29 10-12-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Код:
    gfx[i]:=nkeys;

    круто...
     
    a AddArray() принимает array of double по умолчанию...

    Всего записей: 24263 | Зарегистр. 06-12-2002 | Отправлено: 16:43 10-12-2012 | Исправлено: akaGM, 14:13 11-12-2012
    MagistrAnatol



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Гопода, пробовал и SDAC & ADOConnection в реал тайме все подключается, в десигн тайме  
    [DBNETLIB]ConnectionOpen(Connect()) SQL-сервер не существует или отсутствует доступ.  
    Сервак MS SQL 2005
    В чем прикол??
     
    Добавлено:
    если юзаю SQLConnection - получаю dbx error driver could not be properly initialized

    Всего записей: 2121 | Зарегистр. 09-04-2003 | Отправлено: 16:55 11-12-2012
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите плиз как скопировать ип???
    Есть такая тема:
     http := Form1.IdHTTP1;
      strIP1 := http.Get('http://cmyip.com/');
      strIP1 := copy(strIP1, pos('My IP Address Is  ', strIP1) + 18, 15);
      strIP1 := Trim(strIP1);
     
    Но на сайте чет изменили и терь копируется фигня какая то!
    И если не трудно обьясните эту сторку (strIP1, pos('My IP Address Is  ', strIP1) + 18, 15);
    Я не бетман не ругайтесь сильно

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 06:54 15-12-2012
    Kmich



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GRom V

    Цитата:
    И если не трудно обьясните эту сторку (strIP1, pos('My IP Address Is  ', strIP1) + 18, 15);

    это работа со строками, мы ищем позицию  подстроки 'My IP Address Is  ' в strIP1 и копируем 15 символов из strIP1 с этой позиции+длинна текста подстроки
     
    по идее можно использовать другой сайт если этот косячит (например http://checkip.dyndns.org/)
    проверил что возвращает сайт получилось  81.236.41.150  
    а http://checkip.dyndns.org/ все нормально </head><body>Current IP Address: 87.216.40.150</body></html>

    Всего записей: 192 | Зарегистр. 21-01-2005 | Отправлено: 08:36 15-12-2012 | Исправлено: Kmich, 08:44 15-12-2012
    R3Pa4eK



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Есть ли пример алгоритма BWT в Delphi?

    Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 22:29 16-12-2012
    Coltrain

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    R3Pa4eK

    Цитата:
    пример алгоритма BWT в Delphi?  

    Подойдет? http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.language.basm/2004-09/0030.html

    Всего записей: 160 | Зарегистр. 31-07-2002 | Отправлено: 12:19 17-12-2012
    AHTOLLlKA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет!
    пытаюсь научиться адекватно парсить пакеты, нужно что-то на подобии этого чтобы получилось
       
     

    Код:
     
    MyType = packed record
    UID: Dword;
    NickLen: byte;
    Nick: String;
    Other: Byte;
    end;
    PMyType = ^MyType;
     
    .....................................
     
    var
    t : PMyType;
    buf : TByteArray;
    begin
    buf:=''; //тут данные
    t := PMyType(@buf[0]);
    len:=t^.NickLen;
    SetString ( nick ,pchar(@t.Nick),len);
     

     
    Nick - имеет разную длину, она в переменной LEN
    выше способ все парсит но когда я получаю "Other" то он выдает байт не после строки как мне нужно, а выдает 4-ый байт с начала строки =(
     
    подскажите как мне правильно парсить пакеты, в идеале надо как на скриншоте чтоб вышло
     
    Добавлено:
    данные хранятся в TByteArray
    нужно из src в которой - 01 02 03 04 05
    в dest положить 01 02 (первые например два байта)
    и из src удалить эти первые два байта чтобы он стал - 03 04 05
    вот
     
    делаю так

    Код:
    var
    src,dest: TByteArray;
    setlength(dest,6);
    MoveMemory( @dest[0], @src[0], 6);

    все отлично, но как удалить через INC не понимаю (

    Всего записей: 202 | Зарегистр. 29-09-2006 | Отправлено: 17:10 26-01-2013
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AHTOLLlKA
     

    Цитата:
     но когда я получаю "Other" то он выдает байт не после строки как мне нужно, а выдает 4-ый байт с начала строки  

    строка - это указатель, простым доступом через поля структуры  
    (т.е обращаясь по жестко заданному смещению) ты не получишь данные после нее,
    т.к на этапе компиляции не известно, сколько в строке байт.
     
    т.е читать данные надо примерно так:

    Код:
     
    ptr: PByte
    ...
    ptr := @t.NickLen;
    inc(ptr, SizeOf(Byte));
    nick := ReadWidestring(ptr, t.NickLen);
    MessageLen := ReadByte(ptr);
    Message :=  ReadWidestring(ptr, MessageLen);
    Unk := ReadByte(Ptr);
     

    ---

    Код:
     
    procedure ReadData(var P: PByte; var Data; Len: Integer);
    begin
      Move(P^, Data, Len);
      Inc(P, Len);
    end;
     
    function ReadInt(var P: PByte): Integer;
    begin
      ReadData(P, Result, SizeOf(Result));
    end;
     
    function ReadByte(var P: PByte): Byte;
    begin
      ReadData(P, Result, SizeOf(Result));
    end;
     
    function ReadWidestring(var P: PByte; Count: Integer): WideString;
    begin
      ReadData(P, Result, Count * 2);
    end;
     

     

    Цитата:
    и из src удалить эти первые два байта

    MoveMemory(@src, PByte(@src) + 2, len)
    либо завести новую переменную
    shift_src := PByteArray(PByte(@src) + 2)^
    и работать с ней, если сдвигать надо часто

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 10:44 27-01-2013 | Исправлено: A_V, 10:47 27-01-2013
    AHTOLLlKA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    A_V, спасибо за ответ!
     
    может кто подскажет как мне такое провернуть?
    есть array of byte с данными - 8195
    мне нужно достать 195 от туда, превратив в даже в DEC - 408
     
    почему то не могу реализовать без тупого превращения в строку и копирования (( а это ниразу не гуд

    Всего записей: 202 | Зарегистр. 29-09-2006 | Отправлено: 17:28 28-01-2013
    A_V

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AHTOLLlKA
    а в чем проблема?
    a[1]*$10*$10+a[2]*$10+a[3]
    ну или циклом пройтись, если нидексы не жестко заданы.
    правда как из 195 получается 408 я не уловил, 195h = 405d

    Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 11:10 29-01-2013
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru