ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

09.08.2009, 11:23
|
|
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме: 237284
Репутация:
54
|
|
mailbrush, напиши в OnCreate строку:
И еще вместо твоей функции SubStr я бы написал так:
Код:
result:=result+symbols[Random(Length(symbols)-1)+1];
Последний раз редактировалось Nullsleep; 09.08.2009 в 11:28..
|
|
|

09.08.2009, 12:08
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
привет всем!
возникла сложность в обработке файлика на winapi нужно выделить строки! стандартными способами делфи нехочу делать!
пытаюсь сделать так
Код:
var
Size:cardinal;
mas:Array[0..65536] of char;
Config:array of string;
procedure ReadConfig;
var
re:^integer;
MyFile:integer;
begin
MyFile:= Integer(CreateFile(PChar('sittings.txt'), GENERIC_READ+GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0));
GetMem(re,Sizeof(re));
size:=Getfilesize(MyFile,nil);
ReadFile(THandle(MyFile), mas, size, LongWord(re^), nil);
Closehandle(MyFile);
end;
{$R *.dfm}
Function PosEx(Const SubStr, S: String; Offset: Cardinal = 1): Integer;
var
I,X: Integer;
Len, LenSubStr: Integer;
begin
If Offset = 1 Then
Result := Pos(SubStr, S)
Else
begin
I := Offset;
LenSubStr := Length(SubStr);
Len := Length(S) - LenSubStr + 1;
While I <= Len Do
begin
If S[I] = SubStr[1] Then
begin
X := 1;
While (X < LenSubStr) And (S[I + X] = SubStr[X + 1]) Do
Inc(X);
If (X = LenSubStr) Then
begin
Result := I;
Exit;
End;
End;
Inc(I);
End;
Result := 0;
End;
End;
procedure ObrabConfig;
var
i,j:integer;
S:string;
begin
i:=1;
form1.Label2.Caption:=inttostr(Size);
while i<10771 do
begin
j:=posex(#13#10,mas,i);
S:=copy(mas,i,j);
i:=j+3;
j:=0;
Setlength(Config,high(Config)+2);
Config[high(Config)]:=S;
Form1.memo1.lines.Add(S);
Form1.Label1.Caption:=inttostr(i);
Application.ProcessMessages;
if i>=10771 then
showmessage('ok');
Sleep(50);
end;
end;
но он выводит первою строку норма а потом гонит всякий "шлак"
что я делаю не так?
|
|
|

09.08.2009, 12:34
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 transserg как я понял тебе нужна работа с конфигом. То для таких целей советую юзать виндовую апишку
GetPrivateProfileIntA - читает из конфига число
GetPrivateProfileStringA - чистает из конфига строку
Есть и другие, но тебе они не важны.
Вот пример
Код:
var
my_int:integer;
my_str:array[0..255] of chat;
begin
my_int := GetPrivateProfileIntA('config', 'MY_INT_VAL', 20, 'c:\config.ini');
GetPrivateProfileStringA('config', 'MY_STR_VAL', 'defoult value', my_str, 256, 'config.ini');
где
config - название секции
MY_INT_VAL - название параметра
20 - дефолтовое значение если число
c:\config.ini - непосредственно файл
defoult value - дефолтовое значение если строка
256 - размер буфера.
конфиг - стандартного оформления
[config]
MY_INT_VAL = 10
MY_STR_VAL = hello
Последний раз редактировалось slesh; 09.08.2009 в 12:38..
|
|
|

09.08.2009, 12:43
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
slesh нет конфиг это просто название файла =) да там настройки для программы моей в каждой строке несколько параметров в другой еще несколько вот и нужно выделить строки, по отдельности =)
|
|
|

09.08.2009, 12:46
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
а вообще для работы с конфигами есть ряд функций
Описание найдете в инете
GetPrivateProfileIntA
GetPrivateProfileStringA
GetPrivateProfileStructA
GetPrivateProfileSectionNamesA
GetPrivateProfileSectionA
WritePrivateProfileStringA
WritePrivateProfileSectionA
WritePrivateProfileStructA
|
|
|

09.08.2009, 12:53
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
спасибо за совет! но всеже если это обычный текстовый файл, допустим книжка в тхт то как быть тогда и выделить строки?
|
|
|

09.08.2009, 12:53
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
ну если хочешь читать строки на Апи. то как вариант тогда такая алгоритм.
Считываешь в буфер к примеру 256 байт.
далее ищешь символ конца строки #10 или #13#10
Отнимаешь от размера считанных данных позицию этих символов (+/- 1)
и ставишь передвигаешь указатель в файле назад на это значение.
|
|
|

09.08.2009, 13:16
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Вот навоял функцию для чтения строк из файла на Win API с поддержкой Win и nix форматов файла.
Код:
function ReadString(h:THANDLE; var s:string; max:integer):boolean;
var
buf:pchar;
rb:dword;
p:dword;
begin
result := false;
getmem(buf, max);
ReadFile(h, buf^, max, rb, nil);
if rb > 0 then
begin
result := true;
p := pos(#10, string(buf));
if p = 0 then // если последняя строка
begin
s := string(buf);
end
else
begin
if (p > 1) and (buf[p-2] = #13) then // если Win формат
begin
s := copy(buf, 0, p-2);
end
else // если NIX формат
begin
s := copy(buf, 0, p-1);
end;
SetFilePointer(h, p - rb, nil, FILE_CURRENT);
end;
end;
freemem(buf);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h:THANDLE;
s:string;
x:integer;
const
MAX_LEN = 256;
begin
h := CreateFile('e:\test.txt', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if h <> INVALID_HANDLE_VALUE then
begin
for x := 1 to 10 do
begin
if ReadString(h, s, MAX_LEN) then // читаем строку
begin // если считалась
memo1.Lines.Add('Строка ' + inttostr(x) + ' - ' + s);
end
else break; // прерывем цикл если нет больше строк
end;
CloseHandle(h);
end;
end;
|
|
|

09.08.2009, 15:16
|
|
Новичок
Регистрация: 16.12.2008
Сообщений: 4
Провел на форуме: 13186
Репутация:
0
|
|
Люди кто нибудь знает Как написать на delphi7 код для отправки смс
|
|
|

09.08.2009, 15:17
|
|
Новичок
Регистрация: 16.12.2008
Сообщений: 4
Провел на форуме: 13186
Репутация:
0
|
|
Люди кто нибудь знает Как написать на delphi7 код для отправки смс 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|