Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как поменять?


Автор: pomogite 8.5.2006, 12:17
Как в txt файле заменить это -  "(что то по русский)"  на (Russian) ? 


M
Girder
Название темы - должно отражать её суть!
 

Автор: Guedda 8.5.2006, 12:24
Код

var
  Sl : TStringList;
  i : Integer;
begin
//...
Sl.LoadFromFile('текстовый_файл.txt');
for i := 0 to Sl.Count - 1 do
  StringReplace(Sl[i], 'что_то по-русски', 'Russian', [rfReplaceAll]);
Sl.SaveToFile('текстовый_файл.txt');
end;

А вообще тема неоднократно поднималась. Пользуйтесь поиском...  

Автор: Sunr1se 8.5.2006, 12:49
Создать множество, в котором будут все русские буквы, затем перебирать весь текст на наличие русских букв (if s in rus, где rus - это то самое множество). Неудобный и некрасивый способ, но больше ничего в голову не приходит. Предположим, что текст хранится в переменной s. Тогда механизм такой:

Код

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
i, RusPosition: integer;
FindRus: boolean;
begin
for i := 1 to Length(S) do
  begin
  if s[i] in rus then
    begin
    RusPosition := i;
    FindRus := true;
    end
  else
    begin
     if FindRus = true then
     FindRus := false;
     Delete(s, RusPosition, i);
     Insert('Russian', s, RusPosition);
    end;
 end;
end;


Ну и перед этим опишешь множество русских символов, которое называется rus. 

Автор: pomogite 8.5.2006, 12:59
Guedda, 
Твой код выдаёт ошибку 
Sunr1se, 
А как описать множество? 

Вот что я пишу 
Код


procedure TForm1.Button1Click(Sender: TObject);
var
  Sl:TStringList;
  i:Integer;
begin
//...
Sl.LoadFromFile(Edit1.text);
for i := 0 to Sl.Count - 1 do
  StringReplace(Sl[i], Edit3.text,Edit4.text, [rfReplaceAll]);
Sl.SaveToFile(Edit2.text);
end;

end.

 

Автор: Sunr1se 8.5.2006, 13:08
rus = ['а'..'я', 'А'..'Я']; 


Хотя лучше сделать так:

Код

if s[i] in ['а'..'я', 'А'..'Я'] then
 

Автор: pomogite 8.5.2006, 13:16
А где описывать-то в VAR или где? 

Автор: Poseidon 8.5.2006, 13:19
Цитата(pomogite @  8.5.2006,  13:16 Найти цитируемый пост)
А где описывать-то в VAR или где?  
 В таком виде в const
 

Автор: pomogite 8.5.2006, 13:33
Чё-то не работает 
Код

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
i, RusPosition: integer;
FindRus: boolean;
begin
for i := 1 to Length(S) do
  begin
  if s[i] in rus then
    begin
    RusPosition := i;
    FindRus := true;
    end
  else
    begin
     if FindRus = true then
     FindRus := false;
     Delete(s, RusPosition, i);
     Insert('Russian', s, RusPosition);
    end;
 end;
end;

 

Автор: Sunr1se 8.5.2006, 13:37
Код

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
i, RusPosition: integer;
FindRus: boolean;
begin
for i := 1 to Length(S) do
  begin
  if s[i] in rus then
    begin
    RusPosition := i;
    FindRus := true;
    end
  else
    begin
     if FindRus = true then
        begin
        FindRus := false;
        Delete(s, RusPosition, i);
        Insert('Russian', s, RusPosition);
        end;
    end;
 end;
end; 
 

Автор: Guedda 8.5.2006, 13:40
Эх... Выдает ошибку, так как я тебе просто работу данной процедуры привел. Вот она полностью:
Код

var
  Sl : TStringList;
  i : Integer;
begin
Sl := TStringList.Create;
Sl.LoadFromFile('текстовый_файл.txt');
for i := 0 to Sl.Count - 1 do
  StringReplace(Sl[i], 'что_то по-русски', 'Russian', [rfReplaceAll]);
Sl.SaveToFile('текстовый_файл.txt');
Sl.Free;
end;

У меня все работает. 

Автор: pomogite 8.5.2006, 13:50
У меня этот код просто копирует то что написано в 1.txt в 2.txt 
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Sl : TStringList;
  i : Integer;
begin
Sl := TStringList.Create;
Sl.LoadFromFile('1.txt');
for i := 0 to Sl.Count - 1 do
  StringReplace(Sl[i], 'что_то по-русски2', 'Russian', [rfReplaceAll]);
Sl.SaveToFile('2.txt');
Sl.Free;
end;
 

Автор: Guedda 8.5.2006, 13:55
Точно... Опять забыл одну весчь smile
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Sl : TStringList;
  i : Integer;
  s : string;
begin
Sl := TStringList.Create;
Sl.BeginUpdate;
Sl.LoadFromFile('1.txt');
for i := 0 to Sl.Count - 1 do
begin
  s := Sl[i];
  StringReplace(s, 'что_то по-русски2', 'Russian', [rfReplaceAll]);
  Sl[i] := s;
end;
Sl.SaveToFile('2.txt');
Sl.EndUpdate;
Sl.Free;
end;
 

Автор: pomogite 8.5.2006, 13:59
Всё равно только копирует! 

Автор: Poseidon 8.5.2006, 14:06
Значит в 1.txt нет фразы 'что_то по-русски2', каторую код заменяет на 'Russian'

Добавлено @ 14:09 
Да и код не правильный smile

Код
procedure TForm1.Button1Click(Sender: TObject);
var
  Sl : TStringList;
  s, tmp : string;
begin
Sl := TStringList.Create;
Sl.LoadFromFile('1.txt');
tmp:= Sl.Text;
Sl.Clear;
s:= StringReplace(tmp, 'что_то по-русски2', 'Russian', [rfReplaceAll]);
Sl.Text:= s;
Sl.SaveToFile('2.txt');
Sl.Free;
end;
  

Автор: pomogite 8.5.2006, 14:13
Ага всё работает спасибо приогромное!  smile  

Автор: Guedda 8.5.2006, 14:14
Цитата(Poseidon @  8.5.2006,  15:06 Найти цитируемый пост)
Да и код не правильный smile

Из этого топика брал:
http://forum.vingrad.ru/index.php?showtopic=85951&view=findpost&p=660001 

Автор: Romikgy 8.5.2006, 14:51
А так нельзя разве?
Код

Sl := TStringList.Create;    
Sl.LoadFromFile('1.txt');    
Sl.Text:= StringReplace(Sl.Text, 'что_то по-русски2', 'Russian', [rfReplaceAll]);    
Sl.SaveToFile('2.txt');    
Sl.Free;
 

Автор: Poseidon 8.5.2006, 14:56
Можно, но с использование переменных более понятнее. 

Автор: pomogite 8.5.2006, 15:50
А как сделать чтоб удалялось слово введённое в Edit1?
вот в этом коде 
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button2: TButton;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    Button4: TButton;
    Panel2: TPanel;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f:textfile;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);




var
  Sl : TStringList;
  s, tmp : string;
  i:word;

begin
  for i:=0 to form1.ComponentCount-1 do
if (form1.Components[i] is tedit) then if (form1.Components[i] as tedit).Text='' then
begin
showmessage('Заполнены не все поля!');
exit;
end;



Sl := TStringList.Create;
Sl.LoadFromFile(Edit3.Text);
tmp:= Sl.Text;
Sl.Clear;
s:= StringReplace(tmp, Edit1.Text, Edit2.Text, [rfReplaceAll]);
Sl.Text:= s;
Sl.SaveToFile(Edit4.Text);
Sl.Free;
end;


procedure TForm1.Button2Click(Sender: TObject);

begin
if OpenDialog1.Execute then
 AssignFile(f,OpenDialog1.FileName);
Edit3.Text:=OpenDialog1.FileName;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Close();
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Form2.show;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
 AssignFile(f,OpenDialog1.FileName);
Edit4.Text:=OpenDialog1.FileName;
end;

end.
 

Автор: Poseidon 8.5.2006, 15:54
Цитата(pomogite @  8.5.2006,  15:50 Найти цитируемый пост)
А как сделать чтоб удалялось слово введённое в Edit1?
 Удалялось откуда?
Удалялось в какой процедуре?
 

Автор: pomogite 8.5.2006, 16:01
При нажатии Button1 и например включеном чек боксе 

Автор: pomogite 8.5.2006, 16:14
Стиралось вообще в тхт файле 

Автор: Poseidon 8.5.2006, 16:17
Код
procedure TForm1.Button1Click(Sender: TObject);
var S: TStrings;
begin
if CheckBox1.Checked
then
  begin
  S := TStringList.Create;
  S.LoadFromFile('1.txt');
  S.Text:= StringReplace(S.Text, Edit1.Text, '', [rfReplaceAll]);
  S.SaveToFile('1.txt');
  S.Free;
  end;
end;
  

Автор: pomogite 8.5.2006, 16:22
а как сделать чтоб по нажатию одной и той же кнопки было если удалять то удалять а если заменить знач только заменить... 

Автор: Poseidon 8.5.2006, 16:24
А как ты указываешь, когда удалять, а когда заменить?

И это... один топик - один вопрос! 

Автор: pomogite 8.5.2006, 16:29
Цитата(Poseidon @  8.5.2006,  16:24 Найти цитируемый пост)
А как ты указываешь, когда удалять, а когда заменить?


Код

if checkbox1.Checked=true/false then

 

Автор: Poseidon 8.5.2006, 16:31
Код
procedure TForm1.Button1Click(Sender: TObject);
var S: TStrings;
begin
S := TStringList.Create;
S.LoadFromFile('1.txt');
if CheckBox1.Checked
  then S.Text:= StringReplace(S.Text, Edit1.Text, '', [rfReplaceAll]);
  else S.Text:= StringReplace(S.Text, 'что_то по-русски2', 'Russian', [rfReplaceAll]);    
S.SaveToFile('1.txt');
S.Free;
end; 
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)