Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2009, 13:22   #1
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию Вывод данных из файла при запущенном приложении

Здравствуйте Уважаемое сообщество.
У меня такая проблема.
Мне нужно вывести данные из файла filelog.txt при условии что этот файл занят другим приложением generator.exe, которое и наполняет этот файл данными.
У меня есть программа которая позволяет выводить нужные данные из файла filelog.txt но работает она при условии что файл filelog.txt сохранён и не занят никаким приложением, как сделать так чтоб программа которая выводит нужные данные из файла, выполнялась при запущенном приложении.
pautina вне форума Ответить с цитированием
Старый 26.01.2009, 13:55   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Открыть его с атрибутом ReadOnly ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 26.01.2009, 14:05   #3
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Вы ни скажете какой участок кода использовать.
В моей программе код такой
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
    TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var SourceST,DestST:TStringList;
    i:integer;
    s:string;
begin
 SourceST:=TStringList.Create;
 DestST:=TStringList.Create;
 if form1.OpenDialog1.Execute then SourceST.LoadFromFile(form1.OpenDialog1.FileName);
 for i:=0 to SourceST.Count-1 do
 begin

 // try     // Вывод чисел
 //   if pos('|',SourceST[i])<>0 then // Если строка с разделителем | найдена
 //   SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-47,48)
 //   else SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-47,1); // Если строка с разделителем не найдена то строка состоит из пробела
 //   DestST.Add(SourceST[i]);   // Вывод чисел

 // except
 // end;

  try
    // Вывод временных меток
    if pos(':',SourceST[i])<>0 then // Если строка с : найдена
    SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-19,20)
    else
    // Вывод чисел
     if ((pos('|',SourceST[i])<>0) and ((pos('1',SourceST[i])<>0)
         or (pos('2',SourceST[i])<>0) or (pos('3',SourceST[i])<>0)
         or (pos('4',SourceST[i])<>0) or (pos('5',SourceST[i])<>0)
         or (pos('6',SourceST[i])<>0) or (pos('7',SourceST[i])<>0)
         or (pos('8',SourceST[i])<>0) or (pos('9',SourceST[i])<>0)
         or (pos('0',SourceST[i])<>0)))

     then // Если строка с разделителем | найдена и в строке есть цыфры
     SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-47,48)
    // Если ни временных меток ни чисел нет то строка пустая
    else SourceST[i]:='';
    DestST.Add(SourceST[i]);
  except
  end;

 end;
 DestST.SaveToFile('112.txt'); //   DestST.SaveToFile('112.xls');
 SourceST.Free;
 DestST.Free;
end;

end.
Куда вставить участок кода который позволяет открывать файл с атрибутом ReadOnly

Последний раз редактировалось pautina; 26.01.2009 в 14:08.
pautina вне форума Ответить с цитированием
Старый 26.01.2009, 14:15   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Посмотри тут :
http://www.cyberguru.ru/programming/...rt1-page8.html
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 26.01.2009, 14:34   #5
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Воспользовался функцией FileSetAttr
Код:
FileSetAttr('C:\Documents and Settings\сергей\Рабочий стол\Задание\logfile.txt', faReadOnly);
Мне нужно поставить атрибут чтение и запись, потому что generator.exe записывает в logfile.txt а моя программы читает, сейчас faReadOnly - только чтение как поставить чтение и запись.

Последний раз редактировалось pautina; 26.01.2009 в 14:53.
pautina вне форума Ответить с цитированием
Старый 26.01.2009, 14:59   #6
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Код:
Handle := FileOpen('C:\Documents and Settings\сергей\Рабочий стол\Задание\logfile.txt', fmOpenRead);
Тебе ведь нужно просто отрыть его и прочесть ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 26.01.2009, 15:09   #7
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

А прога, которая пишет этот самый лог (logfile.txt) тоже твоя ?
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 26.01.2009, 15:10   #8
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Может не в то место в коде поставил, выдало ошибку, программа которая пишет лог не моя.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
    TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var SourceST,DestST:TStringList;
    i:integer;
    s:string;
begin
 SourceST:=TStringList.Create;
 DestST:=TStringList.Create;
 if form1.OpenDialog1.Execute then SourceST.LoadFromFile(form1.OpenDialog1.FileName);

 // FileSetAttr('C:\Documents and Settings\сергей\Рабочий стол\Задание\logfile.txt', faReadOnly);  // Атрибуты для файла только чтение
  Handle := FileOpen('C:\Documents and Settings\сергей\Рабочий стол\Задание\logfile.txt', fmOpenRead);


 for i:=0 to SourceST.Count-1 do
 begin

 // try     // Вывод чисел
 //   if pos('|',SourceST[i])<>0 then // Если строка с разделителем | найдена
 //   SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-47,48)
 //   else SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-47,1); // Если строка с разделителем не найдена то строка состоит из пробела
 //   DestST.Add(SourceST[i]);   // Вывод чисел

 // except
 // end;

  try
    // Вывод временных меток
    if pos(':',SourceST[i])<>0 then // Если строка с : найдена
    SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-19,20)
    else
    // Вывод чисел
     if ((pos('|',SourceST[i])<>0) and ((pos('1',SourceST[i])<>0)
         or (pos('2',SourceST[i])<>0) or (pos('3',SourceST[i])<>0)
         or (pos('4',SourceST[i])<>0) or (pos('5',SourceST[i])<>0)
         or (pos('6',SourceST[i])<>0) or (pos('7',SourceST[i])<>0)
         or (pos('8',SourceST[i])<>0) or (pos('9',SourceST[i])<>0)
         or (pos('0',SourceST[i])<>0)))

     then // Если строка с разделителем | найдена и в строке есть цыфры
     SourceST[i]:=Copy(SourceST[i],Length(SourceST[i])-47,48)
    // Если ни временных меток ни чисел нет то строка пустая
    else SourceST[i]:='';
    DestST.Add(SourceST[i]);
  except
  end;

 end;
 DestST.SaveToFile('112.txt'); //   DestST.SaveToFile('112.xls');
 SourceST.Free;
 DestST.Free;
end;

end.
Писал так, Handle как описывать это переменная или что, извиняюсь за вопрос

Последний раз редактировалось pautina; 26.01.2009 в 15:19.
pautina вне форума Ответить с цитированием
Старый 26.01.2009, 15:20   #9
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

тип Handle - Integer
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 26.01.2009, 15:38   #10
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Смотрите а если программа которая пишет этот самый лог generator.exe запрещает другим программам доступ к файлу logfile.txt fmShareExclusive, я уже ничего не смогу сделать или через мою программу это как то можно изменить.
pautina вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных из файла в форму. Delphi. NightShade Помощь студентам 8 25.01.2009 10:30
копирование данных в новую таблицу при интерактивном выборе файла gege Microsoft Office Excel 7 22.10.2008 17:16
вывод из файла!!! Exclucive Общие вопросы C/C++ 2 24.05.2008 20:42
Организовать ввод данных с файла созданного в первом задании и вывод их терминал. Saniok Помощь студентам 2 25.10.2007 22:25
Вывод данных BMP файла на форму Vasya Фриланс 18 24.03.2007 00:59