Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.11.2010, 12:01
Аватар для Oki
Oki Oki вне форума
Прохожий
 
Регистрация: 01.11.2010
Сообщения: 4
Репутация: 10
По умолчанию Считывание и запись в файл

Прошу помочь с одной програмкой. Мне надо было написать програмку которая бы считывала текст из одного файла (*.txt) и записывала этот текст в другой но в другом должен стоять на лимит(не более 60 символов в строке) и остальное содержимое должно переноситься на следующую строку не разрывая слов. У меня есть основа этой программы, но она не входящий в пределы текст просто удаляет. Прошу помочь, вот код
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
files,files2:TextFile;
str,str2:string;
begin
str2:='';
if not FileExists('test.txt') then   exit;
AssignFile(files,'test.txt');
Reset(files);
while not Eof(files) do
  begin
    ReadLn(files, str);
     AssignFile(files2,'test2.txt');
     Append(files2);
        for i:=1 to length(str) do
        begin
        if i>60 then break;
          if str[i]<>' ' then
            str2:=str2+str[i] else
            str2:=str2+' ';
        end;
     Writeln(files2,str2);
     closefile(files2);
     str2:='';
  end;
closefile(files);
end;
 
end.
Ответить с цитированием
  #2  
Старый 01.11.2010, 14:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
unit Unit1;
 
interface
 
uses
  StdCtrls,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var
  Memo: TMemo;
  Memo2: TMemo;
begin
  Memo:=TMemo.Create(Self);
  Memo.Parent:=Self;
  Memo.Font.Name:='Courier';
  Memo.WordWrap:=True;
  Canvas.Font.Assign(Memo.Font);
  Memo.ClientWidth:=Canvas.TextWidth('Wg')*30+Canvas.TextWidth('W');
  Memo.Lines.LoadFromFile('c:\Downloads\memo');
  Memo2:=TMemo.Create(Self);
  Memo2.Parent:=Self;
  Memo2.Lines.Assign(Memo.Lines);
  Memo2.Lines.SaveToFile('c:\Downloads\memo3');
  Memo2.Free;
  Memo.Free;
end;
 
end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 01.11.2010, 14:30
Аватар для Oki
Oki Oki вне форума
Прохожий
 
Регистрация: 01.11.2010
Сообщения: 4
Репутация: 10
По умолчанию

хм. но этот код не работает, программа не переносит текст(
Ответить с цитированием
  #4  
Старый 01.11.2010, 14:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в Delphi 6 работает - ибо давно заметил такой баг за Memo
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 01.11.2010, 15:11
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

код в Д7 работает, но он не переносит слова он их разБивает

sry обписАлся
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.

Последний раз редактировалось friz, 01.11.2010 в 15:51.
Ответить с цитированием
  #6  
Старый 01.11.2010, 15:17
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

чявой делает?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 01.11.2010, 16:42
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function GetWords(AStr: String): TStringList;
var
  i: Integer;
begin
  Result:=TStringList.Create;
  i:=Pos(' ', AStr);
  while i>0 do
  begin
    Result.Add(Copy(AStr, 1, i-1));
    Delete(AStr, 1, i);
    i:=Pos(' ', AStr);
  end;
  if Length(AStr)>0 then Result.Add(AStr);
end;
 
procedure Formated(FLines: TStrings; FFormatedLines: TStrings; Width: Integer);
var
  i: Integer;
  aWords: TStringList;
  aLine: String;
  aWidth: Integer;
begin
  FFormatedLines.Clear;
  for i:=0 to FLines.Count-1 do
  begin
    aWords:=GetWords(FLines[i]);
    aLine:='';
    if aWords.Count>0 then
    begin
      while aWords.Count>0 do
      begin
        aWidth:=Length(aLine+aWords[0]+' ');
        if (aWidth>Width) and (aLine<>'') then
        begin
          FFormatedLines.Add(aLine);
          aLine:='';
        end;
        if Length(aLine)>0 then aLine:=aLine+' ';
        aLine:=aLine+aWords[0];
        aWords.Delete(0);
      end;
      if aLine<>'' then FFormatedLines.Add(aLine);
      aWords.Free;
    end;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Lines.LoadFromFile('c:\Downloads\memo');
  Memo2.Lines.Insert(0, '123456789_123456789_123456789_123456789_123456789_123456789_');
  Memo2.Text:=StringReplace(Memo2.Text, #9, '*', [rfReplaceAll, rfIgnoreCase]);
  <font color="Red">Formated(Memo2.Lines, Memo1.Lines, 60);</font>
  Memo1.Lines.SaveToFile('c:\Downloads\memo3');
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 01.11.2010, 19:30
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

NumLock, а разве
Код:
1
function GetWords(AStr: String): TStringList;
не будет приводить к утечке памяти?
Ответить с цитированием
  #9  
Старый 01.11.2010, 19:57
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

У него это предусмотрено, поэтому он делает далее aWords.Free,
но вот только делает он это немножко не там, надо его чуть ниже перенести.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 01.11.2010, 20:12
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Если функция должна возвращать класс, то в вызывающей ф-и или п-е он не должен быть создан, но должен быть убит?
Ответить с цитированием
  #11  
Старый 01.11.2010, 20:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Без разницы, где создается класс если ссылка на него доступна извне. В любом случае экземпляр класса размещается в доступной области памяти и ссылка нам позволит корректно его прибить.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 01.11.2010, 20:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ага, чуть пониже нужно объект прибить)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #13  
Старый 01.11.2010, 21:10
Аватар для Oki
Oki Oki вне форума
Прохожий
 
Регистрация: 01.11.2010
Сообщения: 4
Репутация: 10
По умолчанию

При запуске программы и нажатии на кнопку выскакивает ошибка


может я чтото не так делаю? или тогда не могли бы вы скинуть ваш проект целиком?
Ответить с цитированием
  #14  
Старый 01.11.2010, 21:43
Аватар для Oki
Oki Oki вне форума
Прохожий
 
Регистрация: 01.11.2010
Сообщения: 4
Репутация: 10
По умолчанию

всё, спасибо всем большое)) разобрался)) то есть длина выводящей строки зависит от длины поля Мемо2, я правильно понял?
Ответить с цитированием
  #15  
Старый 01.11.2010, 22:08
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Страдалецъ, спасибо за пояснения)))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025