Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 73 из 116<  1 ... 70  71  72  73  74  75  76 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 24.12.2004
Откуда: Ставрополье
Максим и alpet Благодарствую.

_________________
Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746
-= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)



Партнер
 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
FatumNNM
У alpet код прикольный, правда я чуть бы по другому написал. Надо будет найти - в свое время просто писал что-то типа TFileBufStream (кто помнит дос еще, тот поймет :) )

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 24.12.2004
Откуда: Ставрополье
Я разобрался c этим вопросом, переписал свой код заново и делаю поиск через массив.

Всем Спасибо :)

_________________
Ставрополье Оверклокерс http://forums.overclockers.ru/viewtopic.php?t=125746
-= World Of Tanks =- (для связи Ватс Ап +7-903-418-03-43)


 

Привет, помогите плиз со следующей задачей.
Надо написать прогу которая сканировала бы заданный каталог "A"
(если возможно путь к каталогу и его имя прописывать скажем в ini-файле),
копировала все его содержимое в другой каталог "B",
а потом по определенным двум-трем подряд идущим символам (они точно не будут повторяться в других файлах) в названии файла
разбирала файлы (с удалением из каталога "А") в указанные папки, если встречается архивный файл
(то есть к примеру если в каталоге "A" есть архив в имени которого подряд идут символы bfh), то
надо извлечь его содержимое в заданный каталог без сохраниния путей, то есть только файлы без папок или же
если в имени архива содержатся символы (ну к примеру rhk) то просто переместить его в указанный каталог.
Всем кто поможет заранее большое спасибо.


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
Urich17
Для этого тебе надо получить сначала полный список файлов в этом каталоге A. А потом уже делай свои действия как хочешь.

Код:
Var
  FF1: Integer = 0;
  FF: Array[1..4096] Of TSearchRec;

Procedure GetFiles(Dir1, File1: String; Var Dirs, Files, FileSize: TStringList;
                   ClearList: Boolean); Register;
Var
  Files1: TStringList;
  Dirs1: TStringList;
  FileSize1: TStringList;
  I: Integer;
  File2: String;

Procedure GetFiles1(Dir1: String); Register;

Procedure GetFiles2; Register;
Var
  Temp: String;
  I64: Int64;
Begin
  If ((FF[FF1].Name <> '.') And(FF[FF1].Name <> '..')) Then
    If ((FF[FF1].Attr And faDirectory) <> 0) Then
      GetFiles1(Dir1 + '\' + FF[FF1].Name)
    Else
    Begin
      Temp := Dir1 + '\' + FF[FF1].Name;
      If File1 = '*.*' Then
      Begin
        Files1.Append(Temp);
        Int64Rec(I64).Lo := FF[FF1].FindData.nFileSizeLow;
        Int64Rec(I64).Hi := FF[FF1].FindData.nFileSizeHigh;
        FileSize1.Append(IntToStr(I64));
      End
      Else
        If File2 <> '' Then
          If UpperCase(ExtractFileExt(Temp)) = '.' + File2 Then
          Begin
            Files1.Append(Temp);
            Int64Rec(I64).Lo := FF[FF1].FindData.nFileSizeLow;
            Int64Rec(I64).Hi := FF[FF1].FindData.nFileSizeHigh;
            FileSize1.Append(IntToStr(I64));
          End
    End;
End;

Begin
  Inc(FF1);
  Dirs1.Append(Dir1);
  If FindFirst(Dir1 + '\*.*', faAnyFile, FF[FF1]) = 0 Then
  Begin
    GetFiles2;
    While FindNext(FF[FF1]) = 0 Do GetFiles2;
    FindClose(FF[FF1]);
  End;
  Dec(FF1);
End;

Begin
  If File1 = '' Then File1 := '*.*';
  If Not DirectoryExists(Dir1) Then Exit;
  For I := Length(Dir1) DownTo 1 Do
    If Dir1[I] <> '\' Then Break;
  SetLength(Dir1, I);
  If ClearList Then
  Begin
    Dirs.Clear;
    Files.Clear;
    FileSize.Clear;
  End;
  Files1 := TStringList.Create;
  Dirs1 := TStringList.Create;
  FileSize1 := TStringList.Create;
  If (File1[1] = '*') And (File1[2] = '.') Then
    File2 := UpperCase(Copy(File1, 3, Length(File1) - 2));
  GetFiles1(Dir1);
  Files.AddStrings(Files1);
  Dirs.AddStrings(Dirs1);
  FileSize.AddStrings(FileSize1);
  Files1.Free;
  Dirs1.Free;
  FileSize1.Free;
End;

На входе директория для поиска, маска для поиска файлов, а выходе получишь все встреченные директории, все файлы (с полным путем до них) и все размеры этих файлов. Количество файлов и количество размеров этих файлов одно и тоже, а количество директорий отличается. Переменная на входе ClearList говорит о том, нужно ли очищать все списки перед добавлением или нет.

Потом просто делаешь копирование всего списка files - все легко и делаешь анализ как ты хочешь.

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 05.01.2003
Откуда: Москва
Фото: 2
To all
есть такой вопрос. Нужно сделать отчет (он уже сделан, но нужно доделать, но не совсем понимаю как), который бы выводил какую-то статистику по определенному человеку.
Сейчас отчет выводит общую статистику по всему указанному временному интервалу, а нужно добавить, чтобы еще, что в отчет добавилась статистика за каждый день.
Отчет в FastReport. Запрос на получение есть, переделать его что бы дополнительно что-то выводил могу без проблем, но переделать сам файл отчета с минимальными изменениями пока не помимаю как.
Помогите

_________________
Устав традиций нужно соблюдать, Хоть и не раз ответят вам отказом: Конечно, баба может и не дать, Но предложить ты ей всегда обязан!


 

Member
Статус: Не в сети
Регистрация: 29.07.2004
Есть консольное приложение(program project1), которое работает с модулем unit1.
Unit1 прописывается в uses этого приложения.
А что и где прописать в самом модуле, чтобы получить доступ к процедурам из этого приложения?
спасибо.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Crowz процедуры должны быть public, а если хочеш и из этого модуля получить доступ к ф-ям приложения, то объяви в uses после implementation соответствующий модуль.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 29.07.2004
Lord_of_Darkness эээ
Там такая структура:

Код:
program Project1;

uses
  Windows,
  Messages,
  SysUtils,
  Unit1 in 'Unit1.pas';

var ....;

procedure name1;
begin
....
end;

begin

end.


надо процедуру name1 вызвать из unit1;
Хотя как вариант можно создать ещё один модуль и запихать процедуру туда,
и оттуда её вызывать когда надо.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Crowz какая-то нестандартная задача, обычно наоборот в главном модуле (программе) вызываются функции из других вспомогательных. Так что запихни лучше свою функцию name1 в модуль unit1 и вызывай ее там сколько вздумается.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 02.03.2005
Откуда: Владивосток
Подскажите кто хорошо знает TThread. Проблема вот в чем - есть компонент для слежения за изменениями файловой системы(появление, изменение, удаление файлов и папок) - TDirMon. В исходниках. Работает так - запускает поток, и в нем уже вызывает апишные функции и обрабатывает их ответы, потом генерит евенты на которые я в проге делаю нужные действия. Причем я перепробывал уже несколько таких компонентов - и у них у всех есть такой трабл, связанный именно с потоком - ОН САМ ПО СЕБЕ ЗАКРЫВАЕТСЯ, т.е. происходит .OnTerminate потока, причем никто этого не делает, в смысле ни сам компонент, ни я из программы(я даже не могу добраться до самого потока, от объявлен в разделе private) ...))

Почему это может происходить - ???

P.S. - У меня на WINXP SP2 - такого нет, а на W2K - периодически, т.е. прога может пару суток пахать - все окей, а потом этот поток возьмет и закроется, но без ошибок и так что сам компонент не знает об этом, т.е. компонент продолжает типа работать ...))

Не стоит дублировать сообщение. Устное предупреждение. mein


 

Member
Статус: Не в сети
Регистрация: 13.06.2005
Откуда: Украина, Глухов
Aleksoid1978 писал(а):
я даже не могу добраться до самого потока, от объявлен в разделе private

Aleksoid1978 писал(а):
TDirMon. В исходниках

поправь, если надо.
а так - вероятно что-то с данными на диске, если все компоненты так работают - ну там файло какое-то появляется, что они дуреют и либо валятся, либо условие выхода срабатывает. може, доступа к файлам?

_________________
Что-то начнется, что-то закончится...


 

Member
Статус: Не в сети
Регистрация: 02.03.2005
Откуда: Владивосток
wCat писал(а):
Aleksoid1978 писал(а):
я даже не могу добраться до самого потока, от объявлен в разделе private

Aleksoid1978 писал(а):
TDirMon. В исходниках

поправь, если надо.
а так - вероятно что-то с данными на диске, если все компоненты так работают - ну там файло какое-то появляется, что они дуреют и либо валятся, либо условие выхода срабатывает. може, доступа к файлам?


По поводу первых двух фраз - я не совсем правильно выразился - я имел ввиду что поток в этом копмоненте объявлен в разделе private - вот почему его невидно из программы(нельзя программно получить доступ).

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

Условия выхода тоже не срабатывают - я на все условия и ошибки сделал запись в лог-файл. Причем при срабатывании .OnTerminate я вызываю GetLastError - так она возвражает 0 - А это значит что ошибки нет ...))


 

Member
Статус: Не в сети
Регистрация: 08.03.2004
Откуда: Житомир, UA
Парни, помогите написать такую вот вещь: В StringGrid1 вводяться имена, при нажатии кнопки они сортируються по алфавиту и выводяться в StringGrid2.

_________________
BF3: [DNO] abraziff


 

Member
Статус: Не в сети
Регистрация: 02.03.2005
Откуда: Владивосток
svin писал(а):
Парни, помогите написать такую вот вещь: В StringGrid1 вводяться имена, при нажатии кнопки они сортируються по алфавиту и выводяться в StringGrid2.


Можно так - создаеш TStringList, у него выставляеш свойство Sorted в True, копируеш в него все свои значения(вводимые имена) из StringGrid1 а потом из TStringList уже копируеш в StringGrid2. Тока что проверил - сортировка по алфавиту идет ...))


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
svin
Код:
var
  Lst: TStringList; // Сам лист, промежуточный контейнер для сортировки
  str: string;
  i: cardinal;
begin
  Lst := TStringList.Create; // Инициализация листа
  Lst.Sorted := true;
  randomize; // Инициализация генератора случайных чисел
  for i:=1 to 49 do
  begin
  // Типа перемудреная генерация строчек для сортировки
    str:=CHR(ORD('A')+random(ORD('Z')-ORD('A')))+
         CHR(ORD('A')+random(ORD('Z')-ORD('A')));
    Lst.Add(str); // Добавляем строку в лист
    StringGrid1.Cells[1,i] := str; // Выводим ее в первый StringGrid
  end;

  // Выводим отсортированные строчки
  for i:=1 to 49 do
    StringGrid2.Cells[1,i] := Lst.Strings[i-1];
end;

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Aleksoid1978 + Lord_of_Darkness
Цитата:
создаеш TStringList

Ооо… :roll:
А интересно как вы планируете сортировать данные в TStringGrid при наличии более чем одной колонки?
Пример: 3 три колонки, первая - дата, вторая - имя, третья - рейтинг -> 12.10.2005;Пупкин;97
И соответственно корректная сортировка записей по любому из полей (столбцов). :wink:


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
_SGK
можно заюзать чтонибудь такое например
Код:
{ 0 - одинаковые строки
  1 - s1 выше при сорт. по возрастанию
  2 - s1 ниже s2 }
function StringsCompare(s1, s2 : string) : byte;
var
  i, N : cardinal;
begin
  Result := 0;
  if Length(s1) <= Length(s2) then
     N := Length(s1)
  else
     N := Length(s2);

  for i:=1 to N do
  begin
    if UpCase(s1[i]) < UpCase(s2[i]) then
    begin
      Result := 1;
      break;
    end;
    if UpCase(s1[i]) > UpCase(s2[i]) then
    begin
      Result := 2;
      break;
    end;
  end;

  if (Length(s1) <> Length(s2)) and (Result = 0) then
     if Length(s1) > Length(s2) then Result := 2
     else Result := 1;
end;


и далее примерно так

Код:
  repeat
    nm := false;
    for i:=1 to 49 do
      if StringsCompare(items[i].str,items[i+1].str) = 2 then
      begin
        tmpitm := items[i];
        items[i] := items[i+1];
        items[i+1] := tmpitm;
        nm := true;
      end;

  until nm = false;

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Последний раз редактировалось Lord_of_Darkness 21.02.2007 22:05, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Lord_of_Darkness
Lord_of_Darkness писал(а):
можно заюзать чтонибудь такое например

Ты невнимательно прочел. :)

1.
_SGK писал(а):
Пример: 3 колонки, первая - дата, вторая - имя, третья - рейтинг -> 12.10.2005;Пупкин;97

2.
_SGK писал(а):
И соответственно корректная сортировка записей по любому из полей (столбцов).

Несмотря на то, что данные хранятся в строке, для корректной сортировки их нужно обрабатывать как разные типы: дату как TDate, имя как String, рейтинг как Integer (к примеру).
Чтобы было понятно, о чем речь просто отсортируй числа от 1 до 20 как строки и посмотри на результат -> 1;10;11;12;13;14;15;16;17;18;19;2;20;3;4;5;6;7;8;9.
Согласись, что это совсем не то, что ожидалось. :)
А именно так и будет отсортированы значения поля рейтинг, если их сортировать как строки.
Такая же байда будет и с данными представленными такими типами как: TDateTime, Currency и т.п.
Соответственно для колонки перед сортировкой необходимо определить тип данных которому строчка из этой колонки соответствует, каждое значение приводить к нужному типу + не забыть о других полях в плане их синхронного перемещения вместе с полем по которому выполняется сортировка.
Все это ессно реализовывается, но из-за проверок и преобразований работает медленно.
Плюс раз уж работа с данными, то хотелось бы иметь и поиск и фильтрацию.
А усе это нужно мутить самому. :)
Это я к тому, что целесообразность использования TStringGrid для меня всегда была неясна. :oops:
Если данных немного и требования к их обработке никакие, то как не крути, а TListView выглядит в разы приятней, а если нужно серьезней поработать с данными то тут выбор - БД, для небольших объемов подходит TClientDataSet.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
_SGK я сказал "чтонибудь такое например" или ты ждал, что я тут модуль накатаю на пару тысяч строк с быстрой сортировкой всевозможных наборов данных и с кучей перегружаемых функций??

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 73 из 116<  1 ... 70  71  72  73  74  75  76 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan