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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2007, 19:14   #1
wwww
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 15
Вопрос Работа с Текстовыми файлами

Хай народ!Подскажите пожалуйста как можно через делфи найти и изменить в текстовом файле определенную строку.Например в файле c:\test.pkt есть строка <NUMBER>123456</NUMBER> как можно изменить номер 123456??
wwww вне форума Ответить с цитированием
Старый 28.10.2007, 19:51   #2
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

procedure TForm1.Button1Click(Sender: TObject);
var
st: TStringList;
i: integer;
tmpSt: string;
begin
st := TStringList.Create;
try
st.LoadFromFile('c:\test.pkt');
for i := 0 to st.count - 1 do
begin
tmpSt := st[i];
if tmpSt = '<NUMBER>123456</NUMBER>' then
begin
tmpSt := '<NUMBER>654321</NUMBER>' ;
break;
end;
end;
st.SaveToFile('c:\test.pkt');
finally
FreeAndNil(st);
end;
end;

Ну, примерно так можно (один из десятка способов).
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Старый 29.10.2007, 04:17   #3
wwww
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 15
По умолчанию

А можно сделать тоже самое только по маске?Например для всех *.txt файлов на жиске C:\
wwww вне форума Ответить с цитированием
Старый 29.10.2007, 08:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
только по маске?
Можно конечно. Применяй FindFirst...FindNext...FindClose.
Задавай там маску, и они найдут тебе все файлы с этой маской. По нахождению открывай каждый и меняй че нуна.

Вот дя раздумий:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function findA(p:string; var slist:TStringList):variant;
var i:integer;
Form1: TForm1;

implementation

{$R *.dfm}
//********** FUNCTION **********
function findA;
var s:TSearchRec; lp,ep,ss:string;k:integer;
begin
ep:='c:\temp\*.txt';
if FindFirst(ep,faAnyFile, s)=0 then begin
repeat
if (s.Name <>'.')and(s.Name <>'..') then begin
lp:='';k:=0; while k<=i*4 do begin lp:=lp+' ';inc(k);end;
if s.Attr=faDirectory then
slist.Append(lp+'['+s.Name+']')
else begin
\\ А тут мы заколбасиваем найденый по маске файл
end;
if s.Attr=faDirectory then begin
inc(i);
findA(ExtractFilePath(p)+s.Name+'\' +ExtractFileName(p), slist);
dec(i);
end;
end;
until FindNext(s)<>0
end;
end;
//********** END FUNCTION ****** {}
procedure TForm1.FormCreate(Sender: TObject);

var ts:TStringList;
begin
ts:=TStringList.Create;
finda('c:\temp\*.*',ts);
ListBox1.Items:=ts;
end;

end.


(P.S. пример с ходя так что баги вероятны...)
(P.P.S пример найдет и файлы в поддиректориях, это рекурсия)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2007, 08:16   #5
Maslan
Форумчанин
 
Регистрация: 15.10.2007
Сообщений: 147
По умолчанию

Дополнение к Шуракену:
Код:
tmpSt := '<NUMBER>654321</NUMBER>' ;
st[i]:=tmpSt; //Ведь tmpSt - это не указатель, а копия...
break; 
end;
end;
st.SaveToFile('c:\test.pkt');
Код:
var
  sr: TSearchRec;
  FileAttrs: Integer;
  St:TStrings;
begin
    St:=TStringList.Create;
    FileAttrs := 0;
    FileAttrs := faReadOnly;
    FileAttrs := FileAttrs + faHidden;
    FileAttrs := FileAttrs + faSysFile;
    FileAttrs := FileAttrs + faVolumeID;
    FileAttrs := FileAttrs + faDirectory;
    FileAttrs := FileAttrs + faArchive;
    FileAttrs := FileAttrs + faAnyFile;
  begin
    if FindFirst('C:\', FileAttrs, sr) = 0 then
    begin
      repeat
        if (sr.Attr and FileAttrs) = sr.Attr then
        begin
         St.LoadFromFile(sr.name);
         St.Text:=StringReplace(st.text,'<NUMBER>123456</NUMBER>','<NUMBER>654321</NUMBER>', [rfReplaceAll]);
         St.SaveToFile(sr.name);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
end;
Maslan вне форума Ответить с цитированием
Старый 29.10.2007, 11:17   #6
wwww
Пользователь
 
Регистрация: 07.10.2007
Сообщений: 15
По умолчанию

Все работает!Огромное спасибо!!!
wwww вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами (Delphi) Omedus Помощь студентам 6 18.12.2012 00:31
Помогите по работе с текстовыми файлами ЕвгениуS Помощь студентам 9 17.01.2010 15:10
Pascal работа с текстовыми файлами Andrey89 Помощь студентам 3 25.12.2007 19:21
Работа с текстовыми файлами DartMrakkk Общие вопросы Delphi 3 14.07.2007 16:52
Задача с текстовыми файлами SpeedMaster Паскаль, Turbo Pascal, PascalABC.NET 4 02.04.2007 15:43