Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Пусть. Мне не до рейтингов пока. Заказ срочный, да и пытаюсь защиту свою сделать в промежутках.
Кстати, АНОНС...
Планирую на этой недели выложить бесплатно для общего пользования нормальную защиту конфы 1С:7.7. Задолбали платные зашиты! Задолбали пользователи-пираты. Думаю, мы все заслужили иметь надежный ключ, чтобы запереть свою конфу от тех, от кого хотим.
Кстати, АНОНС...
Планирую на этой недели выложить бесплатно для общего пользования нормальную защиту конфы 1С:7.7. Задолбали платные зашиты! Задолбали пользователи-пираты. Думаю, мы все заслужили иметь надежный ключ, чтобы запереть свою конфу от тех, от кого хотим.
я не то чтобы ненавижу... но присоединяюсь к мнению O-planeta...
вычислений - на 50 строк, а обвесок интерфейса - на 250 строк - тихий бред...
и что самое бесит - нельзя в одно движение сделать поле для ввода числа...
вычислений - на 50 строк, а обвесок интерфейса - на 250 строк - тихий бред...
и что самое бесит - нельзя в одно движение сделать поле для ввода числа...
Сhe Burashka Написал:
-------------------------------------------------------
>
> вычислений - на 50 строк, а обвесок интерфейса -
> на 250 строк - тихий бред...
Во-первых, можешь писать консольные приложения - мАААААААленькие будут, если у тебя там одни расчеты.
Во-вторых, в том-то и прелесть "обвесок", что получается абсолютно независимая прога. А фигли толку он компактных бэйсиковских файлов, если им для работы требуются либы в несколько мегов, а например, на 98-й их просто нет, и не будет твоя компактная работать, пока ты туда эти несколько мег либ не закинешь.
-------------------------------------------------------
>
> вычислений - на 50 строк, а обвесок интерфейса -
> на 250 строк - тихий бред...
Во-первых, можешь писать консольные приложения - мАААААААленькие будут, если у тебя там одни расчеты.
Во-вторых, в том-то и прелесть "обвесок", что получается абсолютно независимая прога. А фигли толку он компактных бэйсиковских файлов, если им для работы требуются либы в несколько мегов, а например, на 98-й их просто нет, и не будет твоя компактная работать, пока ты туда эти несколько мег либ не закинешь.
Вы - не о том. Мене паскаль и ДЕЛЬФИ, как его вариант, утомляют тем, что там НЕТ ССЫЛОК, как в С, ссылок на ссылки и т.д. Когда работаешь со строками - это очень напрягает. Простая задача: хочу из строки взять кусок с первого указателя по второй. Указатели получаю по strpos, например. Понимаю, что что-то мож подзабыл и не нашел с ходу, но этому аналогов в паскале нет 100%: for(s=&mystr,c=ptr1;c<=ptr2;*s++=*c++); :(
Сhe Burashka Написал:
-------------------------------------------------------
> я не то чтобы ненавижу... но присоединяюсь к
> мнению O-planeta...
> вычислений - на 50 строк, а обвесок интерфейса -
> на 250 строк - тихий бред...
> и что самое бесит - нельзя в одно движение сделать
> поле для ввода числа...
Какую предлагаешь альтернативу?
-------------------------------------------------------
> я не то чтобы ненавижу... но присоединяюсь к
> мнению O-planeta...
> вычислений - на 50 строк, а обвесок интерфейса -
> на 250 строк - тихий бред...
> и что самое бесит - нельзя в одно движение сделать
> поле для ввода числа...
Какую предлагаешь альтернативу?
Давным давно я написал несколько функций в стиле 1С для работы со строками.
У меня это звучит так:
s1:=Left(s,2); s1:=Mid(s,4,2); s1:=StrGetLine(s,1) и т.д...
Дел-то!!!
O-Planet Написал:
-------------------------------------------------------
> Вы - не о том. Мене паскаль и ДЕЛЬФИ, как его
> вариант, утомляют тем, что там НЕТ ССЫЛОК, как в
> С, ссылок на ссылки и т.д. Когда работаешь со
> строками - это очень напрягает. Простая задача:
> хочу из строки взять кусок с первого указателя по
> второй. Указатели получаю по strpos, например.
> Понимаю, что что-то мож подзабыл и не нашел с
> ходу, но этому аналогов в паскале нет 100%:
> for(s=&mystr,c=ptr1;c<=ptr2;*s++=*c++);
>
У меня это звучит так:
s1:=Left(s,2); s1:=Mid(s,4,2); s1:=StrGetLine(s,1) и т.д...
Дел-то!!!
O-Planet Написал:
-------------------------------------------------------
> Вы - не о том. Мене паскаль и ДЕЛЬФИ, как его
> вариант, утомляют тем, что там НЕТ ССЫЛОК, как в
> С, ссылок на ссылки и т.д. Когда работаешь со
> строками - это очень напрягает. Простая задача:
> хочу из строки взять кусок с первого указателя по
> второй. Указатели получаю по strpos, например.
> Понимаю, что что-то мож подзабыл и не нашел с
> ходу, но этому аналогов в паскале нет 100%:
> for(s=&mystr,c=ptr1;c<=ptr2;*s++=*c++);
>
Один даденька американский (не помню фамилию) писал так:
если вам нравится строгий академический стиль - пользуйтесь Паскалем,хотите синтаксических извратов - юзай Си. Мужик какой-то там почетный член и по Си, и по Дельфи
если вам нравится строгий академический стиль - пользуйтесь Паскалем,хотите синтаксических извратов - юзай Си. Мужик какой-то там почетный член и по Си, и по Дельфи
Сhe Burashka Написал:
-------------------------------------------------------
> Abadonna? ты - супер!
> +1
> ;-)
Полностью согласен с предыдущим оратором.
+5 Ибо сильно улыбнуло.
О-Планет, надеюсь дружескую шутку за обиду не примешь?
Кстати о Делфи, а кто тебе мешает использовать указатели? Согласен, реализация похуже, чем в СИ, но все-таки!
-------------------------------------------------------
> Abadonna? ты - супер!
> +1
> ;-)
Полностью согласен с предыдущим оратором.
+5 Ибо сильно улыбнуло.
О-Планет, надеюсь дружескую шутку за обиду не примешь?
Кстати о Делфи, а кто тебе мешает использовать указатели? Согласен, реализация похуже, чем в СИ, но все-таки!
Планет, лови функции для работы со строками в стиле 1С.
Вишь, какой я добрый... ;)
const LineBreak = #13#10;
function StrCountOccur(s, ch: string): Integer; //СтрЧислоВхождений
var i, p, l, count: integer;
begin
l := Length(ch);
Count := 0;
p := Pos(ch, s);
while Pos(ch, s) > 0 do begin
p := Pos(ch, s);
count := count + 1;
s := Copy(s, p + 1, Length(s) - p);
end;
for i := 1 to Length(s) do begin
if s[i] + s[i + 1] = ch then Count := Count + 1;
end;
RESULT := count;
end;
function StrReplace(s, OldPat, NewPat: string): string; //СтрЗаменить
begin
RESULT := StringReplace(s, OldPat, NewPat, [rfReplaceAll]);
;
end;
function StrLineCount(s: string): Integer; //СтрКоличествоСтрок;
var i, Count: integer;
begin
RESULT := StrCountOccur(s, LineBreak) + 1;
end;
function StrGetLine(const s: WideString; num: Integer): WideString;
//СтрПолучитьСтроку
var L: TStringList;
begin
L := TStringList.Create;
L.Text := s;
if Num < 1 then Num := 1;
if Num > L.Count then Num := L.Count;
RESULT := L[Num - 1];
L.Free;
end;
function StrLeft(const s: WideString; num: Integer): WideString; //Лев
begin
if num > Length(s) then num := Length(s);
RESULT := Copy(s, 1, num);
end;
function StrRight(const s: WideString; num: Integer): WideString; //Прав
begin
if num > Length(s) then num := Length(s);
RESULT := Copy(s, Length(s) - num + 1, num);
end;
function StrMid(const s: WideString; num1: Integer; num2: Integer = 0):
WideString; //Сред
begin
if num1 > Length(s) then num1 := Length(s);
if num2 > Length(s) - num1 then num2 := 0;
if num2 = 0 then RESULT := Copy(s, num1, Length(s) - num1 + 1)
else RESULT := Copy(s, num1, num2);
end;
Вишь, какой я добрый... ;)
const LineBreak = #13#10;
function StrCountOccur(s, ch: string): Integer; //СтрЧислоВхождений
var i, p, l, count: integer;
begin
l := Length(ch);
Count := 0;
p := Pos(ch, s);
while Pos(ch, s) > 0 do begin
p := Pos(ch, s);
count := count + 1;
s := Copy(s, p + 1, Length(s) - p);
end;
for i := 1 to Length(s) do begin
if s[i] + s[i + 1] = ch then Count := Count + 1;
end;
RESULT := count;
end;
function StrReplace(s, OldPat, NewPat: string): string; //СтрЗаменить
begin
RESULT := StringReplace(s, OldPat, NewPat, [rfReplaceAll]);
;
end;
function StrLineCount(s: string): Integer; //СтрКоличествоСтрок;
var i, Count: integer;
begin
RESULT := StrCountOccur(s, LineBreak) + 1;
end;
function StrGetLine(const s: WideString; num: Integer): WideString;
//СтрПолучитьСтроку
var L: TStringList;
begin
L := TStringList.Create;
L.Text := s;
if Num < 1 then Num := 1;
if Num > L.Count then Num := L.Count;
RESULT := L[Num - 1];
L.Free;
end;
function StrLeft(const s: WideString; num: Integer): WideString; //Лев
begin
if num > Length(s) then num := Length(s);
RESULT := Copy(s, 1, num);
end;
function StrRight(const s: WideString; num: Integer): WideString; //Прав
begin
if num > Length(s) then num := Length(s);
RESULT := Copy(s, Length(s) - num + 1, num);
end;
function StrMid(const s: WideString; num1: Integer; num2: Integer = 0):
WideString; //Сред
begin
if num1 > Length(s) then num1 := Length(s);
if num2 > Length(s) - num1 then num2 := 0;
if num2 = 0 then RESULT := Copy(s, num1, Length(s) - num1 + 1)
else RESULT := Copy(s, num1, num2);
end;
O-Planet Написал:
-------------------------------------------------------
> Я там специально поставлю проверку на
> наличие кода программы, характерного ЧЕбуратору
> или Абадонне, что б оно ети программы прям-таки
> разрывало на части! :-Е
>
Польстило ;) Оказывается есть код, характерный Абадонне. Я и сам не подозревал
-------------------------------------------------------
> Я там специально поставлю проверку на
> наличие кода программы, характерного ЧЕбуратору
> или Абадонне, что б оно ети программы прям-таки
> разрывало на части! :-Е
>
Польстило ;) Оказывается есть код, характерный Абадонне. Я и сам не подозревал
O-Planet Написал:
-------------------------------------------------------
> Сhe Burashka
> Тссс!!!!!!
Это типа - ША! Улыбайтесь - за нами следят....
>
> Abadonna
> На ассемблере хАчу...
Делфи позволяет и код на ассемблере вставлять - но это не есть хорошая практика. Имхо - лучше создать библиотеку асмовских функций и использовать в Делфи. Хотя лично я не вижу смысла в асме, кроме как низкоуровневого программирования ввода/вывода на внешние устройства (в частности монитор). Для сложения или умножения двух чисел применение асма - либо изврат, либо мазохизм (хотя был длительный период, когда писал только на ассемблере и даже когда перешел на СИ, все равно продолжал создавать асмовские библиотеки функций, пока на обработке большого массива данных не убедился лично, что почти "едэн хрын", как говорят поляки, что Си, что асм...)
Думаешь, предложенный Абадонной код намного медленнее асмовского? Сильно сомневаюсь...
Абадонна молодец - респект ему. Я бы наверное делал через указатели (конструкция ^), а затем смещал указатель на рамер элемента данных (к примеру, для обчной строки один символ - один байт).
-------------------------------------------------------
> Сhe Burashka
> Тссс!!!!!!
Это типа - ША! Улыбайтесь - за нами следят....
>
> Abadonna
> На ассемблере хАчу...
Делфи позволяет и код на ассемблере вставлять - но это не есть хорошая практика. Имхо - лучше создать библиотеку асмовских функций и использовать в Делфи. Хотя лично я не вижу смысла в асме, кроме как низкоуровневого программирования ввода/вывода на внешние устройства (в частности монитор). Для сложения или умножения двух чисел применение асма - либо изврат, либо мазохизм (хотя был длительный период, когда писал только на ассемблере и даже когда перешел на СИ, все равно продолжал создавать асмовские библиотеки функций, пока на обработке большого массива данных не убедился лично, что почти "едэн хрын", как говорят поляки, что Си, что асм...)
Думаешь, предложенный Абадонной код намного медленнее асмовского? Сильно сомневаюсь...
Абадонна молодец - респект ему. Я бы наверное делал через указатели (конструкция ^), а затем смещал указатель на рамер элемента данных (к примеру, для обчной строки один символ - один байт).
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот