Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с текстовыми файлами 
V
    Опции темы
Martisha
  Дата 25.11.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



подскажите пожалуйста как можно из папки текстовые файлы загрузить в RichEdit, Memo ListBox(в принципе во что угодно!!! не имеет значения), для дальнейшей обработки и занесения в бд, причем эта папка каждый час обновляется, т.е. все должно в цикле проходить..
нашла подобный пример, но разобраться не смогла в нем(
вот пример:

Код

private
    { Private declarations }
     Procedure ScanFilder(Dir:String);
...
...
  public
    { Public declarations }
...

implementation

{$R *.dfm}


Procedure TForm1.ScanFilder(Dir:String);
Var
 SearchRec:TSearchRec;
begin
 try
   if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir);
   if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then//если что-то нашли
     repeat
       if (SearchRec.name='.') or (SearchRec.name='..') then continue;//если это не каталоги и не файлы, то пропускаем
       if ((SearchRec.Attr and faDirectory)<>0) then//
         ScanFilder(Dir+SearchRec.name) //нашли папку и вызываем опять саму себя - рукурсия называется
       else  begin//если попалась не папка, а файл, то вот он родной, нужно узнать расширение
             
           if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.RTF' then   EditFile(Dir+SearchRec.name);//если расширение "наше", то вызываем функцию EditFile(), а вот уже эту функцию пиши сам, никто не знает точно что ты в ней будешь делать!!!
       end;//else
     until FindNext(SearchRec)<>0;
   FindClose(SearchRec);//заканчиваем поиск
 finally
   //
 end;
end;

PM MAIL ICQ   Вверх
mrbrooks
Дата 25.11.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Martisha, все достаточно проще. Есть метод у этих компонентов - LoadFromFile()
PM MAIL   Вверх
Martisha
Дата 25.11.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(mrbrooks @  25.11.2008,  13:27 Найти цитируемый пост)
Есть метод у этих компонентов - LoadFromFile() 

я делала так 
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.LoadFromFile('C:\ROU99STAT\19.11.2008-208.txt');
end;


но ведь это каждый текстовый файл отдельно загружать надо

Это сообщение отредактировал(а) Martisha - 25.11.2008, 13:40
PM MAIL ICQ   Вверх
aleksh
Дата 25.11.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



Цитата(Martisha @  25.11.2008,  13:35 Найти цитируемый пост)
но ведь это каждый текстовый файл отдельно загружать надо

ну да, поэтому и цикл, просто в функции, котороая в первом примере звется EditFile() при открытии файла указываешь адрес не вручную, а подставляешь Dir+SearchRec.name. как и куда этот файл загружать -- в вопросе не уточнялось
можно чуть подробней -- что конкретно нужно?
PM MAIL   Вверх
Martisha
Дата 25.11.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(aleksh @  25.11.2008,  13:44 Найти цитируемый пост)
как и куда этот файл загружать 

есть папка, в которую загружаются раз в час текстовые файлы..их нужно для дальнейшей обработки загрузить ListBox например. Т.е. каждый текстовый файл по очереди загружаем туда, обрабатываем, выгружаем обработанный в базу данных, затем то же самое со следующим..
вот в принципе и все

Это сообщение отредактировал(а) Martisha - 25.11.2008, 13:51
PM MAIL ICQ   Вверх
aleksh
Дата 25.11.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



хотя тут подумал, может так проще
Код

Var
 SearchRec:TSearchRec; //объявляется структура, которая хранит аттрибуты найденных файлов
begin
 try //страхуемся на случай сбоев, например ищем на флешке которую резко вынули
   if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir); //переменная string, вот только где ее объявили? убедились, что строка заканчивается "\"
   if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then//если что-то нашли, тобишь папка не пуста
     repeat //а теперь цикл, ибо в папке может быть много чего
       if (SearchRec.name='.') or (SearchRec.name='..') then continue;//если это не каталоги и не файлы, то пропускаем
       if ((SearchRec.Attr and faDirectory)<>0) then// убедились что это не каталог, хотя надобы еще добавить аттрибутов, ибо может быть системная или скрытая папка, а в примере ее примут за файл
         ScanFilder(Dir+SearchRec.name) //нашли папку и вызываем опять саму себя - рукурсия называется
       else  begin//если попалась не папка, а файл, то вот он родной, нужно узнать расширение
             
           if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.RTF' then   EditFile(Dir+SearchRec.name);//если расширение "наше", то вызываем функцию EditFile(), а вот уже эту функцию пиши сам, никто не знает точно что ты в ней будешь делать!!!
       end;//else
     until FindNext(SearchRec)<>0; //и так пока все не переберем
   FindClose(SearchRec);//заканчиваем поиск
 finally
   //
 end;
end;

повторюсь, пример перебирает содержимое папки, включая вложенные директории, и передает, по очереди, функции EditFile() адреса и имена всех файлов rtf
еще вопросы?
PM MAIL   Вверх
mrbrooks
Дата 25.11.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



Martisha,  ну и в чем проблема.
есть структура TSearchRec, функции FindFirst(), FindNext() и FindClose().
Поиск организуем в цикле. Если файл удовлетворяет условиям, грузим его через LoadFromFile().

собственно это в примере и показано.  я пример могу написать, но он будет в Builder C++. Пойдет?
PM MAIL   Вверх
aleksh
Дата 25.11.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



вопрос в том, успеем ли мы обработать и выгрузить в бд файл до появления нового, если да, то в EditFile() достаточно прописать LoadFromFile, и что-то, что привлечет внимание, например вывести форму вперед, если нет -- надо думать над организацей очереди

еще вопрос -- таких вот фалов, которые загружать надо, их сколько может найтись за раз? их загружать все вместе, или по очереди?

обработка, вроде как, будет делаться ручками, правильно?
PM MAIL   Вверх
mrbrooks
Дата 25.11.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



на всякий случай выложу вариант в Билдере.
Код

TSearchRec sr;
Memo1->Clear();
TStringList *list = new TStringList;
if(!FindFirst("*.txt",faAnyFile|faDirectory,sr))
{
  list->LoadFromFile(sr.Name);
  Memo1->Lines->AddString(list);
  while (!FindNext(sr))
  {
    list->LoadFromFile(sr.Name);
    Memo1->Lines->AddString(list);
  }
}
FindClose(sr);
delete list;

PM MAIL   Вверх
Martisha
Дата 25.11.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



делаю так, ошибок не выдает, но и не загружает

Код

Procedure TForm1.ScanFolder(Dir:String);
Var
 SearchRec:TSearchRec;
begin
 try
  if Dir<>'' then Dir:=IncludeTrailingPathDelimiter(Dir);
  if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then
   repeat
    if (SearchRec.name='.') or (SearchRec.name='..') then continue
    if ((SearchRec.Attr and faDirectory)<>0) then//
         ScanFolder(Dir+SearchRec.name) 
     else
      begin
       if AnsiUpperCase(ExtractFileExt(SearchRec.name)) = '.TXT' then EditFile(Dir+SearchRec.name);
      end;
   until FindNext(SearchRec)<>0;
  FindClose(SearchRec);
 finally
 end;
end;

procedure TForm1.EditFile(FileName:string);
begin
 ListBox1.Items.LoadFromFile(FileName);        
end;


Добавлено через 3 минуты и 41 секунду
Цитата(mrbrooks @  25.11.2008,  13:52 Найти цитируемый пост)
 я пример могу написать, но он будет в Builder C++. Пойдет? 

нет, не пойдет(
Цитата(aleksh @  25.11.2008,  13:58 Найти цитируемый пост)
их сколько может найтись за раз? 

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

Цитата(aleksh @  25.11.2008,  13:58 Найти цитируемый пост)
обработка, вроде как, будет делаться ручками, правильно? 

нет, не ручками 
PM MAIL ICQ   Вверх
mrbrooks
Дата 25.11.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



aleksh, для записи в БД я думаю количество приходящих файлов не критична, так как записью по идее должна заниматься отдельная служба или поток, который после считывания инфы должен этот файл удалять.

Добавлено через 2 минуты и 20 секунд
Цитата(Martisha @  25.11.2008,  14:12 Найти цитируемый пост)
нет, не пойдет(

 smile  я уже
PM MAIL   Вверх
aleksh
Дата 25.11.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



Цитата(Martisha @  25.11.2008,  14:12 Найти цитируемый пост)
но и не загружает

а что должно загружать?
в данном случае каждый новый файл грузится вместо предыдущего, если последный файл будет пустым, то и листбокс будет пустым
у mrbrooks-а хороший выход из такой проблемы
вопрос в другом -- имена файлов правильно передаются?
PM MAIL   Вверх
Martisha
Дата 25.11.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



mrbrooks, спасибо, только я и в Delphi то слабак  smile 
PM MAIL ICQ   Вверх
aleksh
Дата 25.11.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 1
Всего: 13



Цитата(mrbrooks @  25.11.2008,  14:16 Найти цитируемый пост)
для записи в БД я думаю количество приходящих файлов не критична

для бд да, но мы же видим пример, из которого следует, что находит файл, грузит в листбокс, потом человек его правит или просто смотрит и отдает на запись, а если в это время найдется еще один файл, или несколько?
PM MAIL   Вверх
Martisha
Дата 25.11.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 15.10.2008
Где: казань

Репутация: нет
Всего: 1



Цитата(mrbrooks @  25.11.2008,  14:16 Найти цитируемый пост)
который после считывания инфы должен этот файл удалять

это как?

Цитата(aleksh @  25.11.2008,  14:18 Найти цитируемый пост)
имена файлов правильно передаются? 

наверное нет

Добавлено через 2 минуты и 19 секунд
Цитата(aleksh @  25.11.2008,  14:21 Найти цитируемый пост)
потом человек его правит или просто смотрит и отдает на запись, а если в это время найдется еще один файл, или несколько? 

а если загружать, обрабатьвать, выгружать в бд, а текстовый файл из папки, после обработки  удалять?
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.