Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
ZALMAN0371 Это значит, что значение Value побитово сдвинуть на Digits бит вправо и выделить 1 бит.
То есть в Digits у тебя должно находиться кол-во бит (или длина строки) на выходе.
То есть к примеру если запустишь так(spaces можешь выкинуть из функции совсем:
Код:
Temp := IntToBin(8, 4);
, то в итоге получишь: 1000, а если сделаешь так -
Код:
Temp := IntToBin(8, 3);
, то в итоге получишь: 000
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
ZALMAN0371 По поводу подсчета кол-во слов в строке? Ну да, пашет.
Это две функции из пакета Qstrings от Andrew Dryazgov. Если что, то могу весь исходник с такими вещами выложить.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
АГА, так проще, но факт в том, что точно медленнее будет, да еще и память жрет
Почему ты считаешь, что медленнее? Ты хочешь сказать, что быстрее будет прокручивать циклы по всему тексту, в поисках соответствия в массивах с разделителями? А что касается памяти, я не думаю, что это настолько принципиально и каким-то образом скажется на общей работе программы.
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
ZALMAN0371 Да, shr это зарезервированное слово для работы с битами.
А Register - это слово, определяющее, что входные параметры будут передаваться через регистры типа eax, ebx и т.д.
Если часть запускаешь большое кол-во процедур, немного выигрываешь в скорости. Но в итоге от этого слова в большинстве своего кода просто ушел.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
-Raptor- Вполне возможно, что в скорости будет тоже самое, но памяти TList жрет мягко говоря конкретно. Хотя конечно кому как.
Лучше тогда уж использовать переделанный Tlist из пакета RtlVclOptimize
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Максим TStringList можно использовать лишь для получения параметров и выполнения с ними определённых действий, а затем уничтожать, освобождая тем самым память. Всё зависит от того, как будут использоваться эти самые параметры. В любом случае, для хранения параметров нужна какая-то структура - будь то массив или список, не суть важно. Sokrat'у это нужно для передачи параметров в БД, как я понял из его поста. А когда речь идёт о базах, грешить на расходы памяти TStringList просто смешно, т.к. компоненты для работы с базой (ADO, BDE, NativeDB и пр.) жрут памяти значительно больше какого-то жалкого списка со строками, да и скорость обращения к базе куда медленнее обработки строчек в TStringList.
Последний раз редактировалось -Raptor- 31.07.2008 19:56, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
-Raptor- Так потому что стандартный TTable и иже с ним основаны как раз на TList. Хотя в тоже время, при работе с таблицами лучше использовать TkbmMemTable в режиме Small или TMemTableEh, памяти очень мало уходит.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 27.05.2006 Откуда: Saransk
Всем доброго времени суток. У меня следущий вопрос. У меня в компоненте ListBox выводится список txt файлов, примерное с такими именами "накладная20080512.txt" и так далее, задача следущая нужно сделать так чтобы можно было вводить даты в какие-нибудь поля и чтобы оставались в листбоксе только те файлы чьи даты подходят, например "накладная 20080501.txt и накладная20080522.txt" т.е. файлы с 1 по 22 мая, может какой нить компонент имеется в Delphi для таких задач... пожалуйста помогите, всем заранее спасибо
_________________ Я рвусь от новостей так быстро мир стал другой.
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
mp3corp А если держать все названия файлов в StringList, и потом оттуда закачивать в ListBox. Если пользователь выбирает две какие даты и пишет обновить, то очистить ListBox и копировать в него из StringList только те названия, которые подходят под эти даты?
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Member
Статус: Не в сети Регистрация: 05.01.2003 Откуда: Москва Фото: 2
mp3corp А в чем проблема то? По идее все очень легко.
Функция перевода даты в формат твоей строки (ну если самому писать):
Код:
Function MakeStr(C: Char; N: Integer): String; Register; Begin If N < 1 Then4 Result := EmptyStr Else Begin SetLength(Result, N); FillChar(Result[1], Length(Result), C); End; End;
Function AddChar(C: Char; Const S: String; N: Integer): String; Register; Begin If Length(S) < N Then Result := MakeStr(C, N - Length(S)) + S Else Result := S; End;
Function MyDateToStr(ATime: TDateTime): String; Var Year, Month, Day: Word; Begin //запишем в строку нужную нам дату DecodeDate(ATime, Year, Month, Day); Result := AddChar(ZeroConst, IntToStr(Year), 4) + AddChar(ZeroConst, IntToStr(Month), 2) + AddChar(ZeroConst, IntToStr(Day), 2) ; End;
То есть у тебя в итоге получается так примерно. Предположим у тебя есть два компонента, где ты редактируешь даты edtBeginDate и edtEndDate. Получаешь свои даты в варианте integer:
Добавлено спустя 9 минут, 53 секунды Потом берешь каждый элемент stringlist и проверяешь его на соответствующие даты:
Код:
List1.Items.Clear; For I := 0 To MyStringList.Count - 1 Do Begin FileName := ExtractFileName(MyStringList[I]); SetLength(FileName , Length(FileName ) - Length(ExtractFileExt(FileName))); If Length(FileName) > 8 Then Begin FileName := Copy(FileName, Length(FileName) - 8, MaxInt); FileNameDate := StrToIntDef(FileName, -1); If FileNameDate <> -1 Then If (BeginDate >= FileNameDate) And (FileNameDate <= EndDate) Then List1.Items.Add(MyStringList[I]); End; End;
Добавлено спустя 44 секунды вроде нигде не ошибся.
_________________ Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения