![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть лог-файл, где происходит запись после запуска exe-файла новым пользователем - в конец каждой строки прописывается имя компьютера с которого была запущена программа:
Код: #1 comp1 comp2 comp3... #2 comp1 comp2 comp3 ... #3 comp1 comp2 comp3 ... Как сделать, чтобы в конец каждой строки прописывалось новое имя, при этом происходила проверка на "новизну" имени? |
|
#2
|
|||
|
|||
|
Ну, просканируйте перед записью строку на предмет вхождения в нее подстроки с именем «текущего» компьютера (с помощью функции Pos). Или в чем проблема?
|
|
#3
|
|||
|
|||
|
Цитата:
Логичнее сделать так: проверка по первой строке, если есть то выходим, если нет - добавляем в конец каждой строки. Т.е., первая строка является трафаретом для других строк, где все идентично первой. Вот только как реализовать на деле? |
|
#4
|
|||
|
|||
|
Код:
const
COMPNAME = 'comp5'; // например
FILEPATH = 'comps.txt'; // например
var
comps: TStringList;
i: Integer;
Str: string;
begin
comps := TStringList.Create;
try
if not FileExists(FILEPATH) then Exit;
comps.LoadFromFile(FILEPATH);
Str := Copy(comps.Text, 1, Pos(#13#10, comps.Text) + 2);
if (Pos(' ' + COMPNAME + ' ', str) = 0) and
(Pos(' ' + COMPNAME + #13, str) = 0) then
begin
for i := 0 to comps.Count - 1 do
comps.Strings[i] := comps.Strings[i] + ' ' + COMPNAME;
comps.SaveToFile(FILEPATH);
end;
finally
comps.Free;
end;
end;Последний раз редактировалось Nyctos Kasignete, 22.07.2009 в 13:52. |
|
#5
|
|||
|
|||
|
А как можно заменить:
Код:
const COMPNAME = 'comp5'; |
|
#6
|
|||
|
|||
|
Код:
const
FILEPATH = 'comps.txt'; // например
var
comps: TStringList;
i: Integer;
Str: string;
username: PChar;
unsize: DWORD;
begin
comps := TStringList.Create;
GetMem(username, 255);
try
if not GetUserName(username, unsize) then Exit;
if not FileExists(FILEPATH) then Exit;
comps.LoadFromFile(FILEPATH);
Str := Copy(comps.Text, 1, Pos(#13#10, comps.Text) + 2);
if (Pos(' ' + StrPas(username) + ' ', str) = 0) and
(Pos(' ' + StrPas(username) + #13, str) = 0) then
begin
for i := 0 to comps.Count - 1 do
comps.Strings[i] := comps.Strings[i] + ' ' + StrPas(username);
comps.SaveToFile(FILEPATH);
end;
finally
comps.Free;
FreeMem(username, 255);
end;
end;Последний раз редактировалось Nyctos Kasignete, 23.07.2009 в 10:27. |