![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Прошу помочь с одной програмкой. Мне надо было написать програмку которая бы считывала текст из одного файла (*.txt) и записывала этот текст в другой но в другом должен стоять на лимит(не более 60 символов в строке) и остальное содержимое должно переноситься на следующую строку не разрывая слов. У меня есть основа этой программы, но она не входящий в пределы текст просто удаляет. Прошу помочь, вот код
Код:
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
|
||||
|
||||
![]() Код:
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
|
||||
|
||||
![]() хм. но этот код не работает, программа не переносит текст(
|
#4
|
||||
|
||||
![]() в Delphi 6 работает - ибо давно заметил такой баг за Memo
![]() Пишу программы за еду. __________________ |
#5
|
||||
|
||||
![]() код в Д7 работает, но он не переносит слова он их разБивает
sry обписАлся ![]() Последний раз редактировалось Admin, Сегодня в 10:32. Последний раз редактировалось friz, 01.11.2010 в 15:51. |
#6
|
||||
|
||||
![]() чявой делает?
Пишу программы за еду. __________________ |
#7
|
||||
|
||||
![]() Код:
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]); Formated(Memo2.Lines, Memo1.Lines, 60); Memo1.Lines.SaveToFile('c:\Downloads\memo3'); end; Пишу программы за еду. __________________ |
#8
|
||||
|
||||
![]() NumLock, а разве
Код:
function GetWords(AStr: String): TStringList; |
#9
|
||||
|
||||
![]() У него это предусмотрено, поэтому он делает далее aWords.Free,
но вот только делает он это немножко не там, надо его чуть ниже перенести. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
||||
|
||||
![]() Если функция должна возвращать класс, то в вызывающей ф-и или п-е он не должен быть создан, но должен быть убит?
|
#11
|
||||
|
||||
![]() Без разницы, где создается класс если ссылка на него доступна извне. В любом случае экземпляр класса размещается в доступной области памяти и ссылка нам позволит корректно его прибить.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#12
|
||||
|
||||
![]() ага, чуть пониже нужно объект прибить)
Пишу программы за еду. __________________ |
#13
|
||||
|
||||
![]() |
#14
|
||||
|
||||
![]() всё, спасибо всем большое)) разобрался)) то есть длина выводящей строки зависит от длины поля Мемо2, я правильно понял?
|
#15
|
||||
|
||||
![]() Страдалецъ, спасибо за пояснения)))
|