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


Автор: Ddddddelphi 7.12.2004, 10:49
имеется текстовый файл как его нужно открывать, чтобы в каждой строке было по 20 символов? smile

Автор: ~FoX~ 7.12.2004, 10:54
Ddddddelphi
smile smile smile
Это как понять то?

Автор: Ddddddelphi 7.12.2004, 11:31
нужно чтобы тестовый файл делился бы по 20 символов в каждой строке:

файл:
1234567890123456789012345678901234567890
123456789012345678901234567890

вывод:
12345678901234567890
12345678901234567890
12345678901234567890
1234567890

Автор: ~FoX~ 7.12.2004, 11:40
Ddddddelphi

Код

var
 Buf : array [0..19] of Char
 NumRead: Integer;
begin
repeat
       BlockRead('myfile.txt', Buf, SizeOf(Buf), NumRead);
until (NumRead = 0)
end;

Что то в этом роде, точнее читай в хелпе.

Автор: Ddddddelphi 7.12.2004, 13:09
не разобрался - а не подскажешь smile

Автор: ~FoX~ 7.12.2004, 13:23
Ddddddelphi
Что именно тебе не понятно?
Цитата

     
                                                               где читаем
                                                                     |
 BlockRead('myfile.txt', Buf, SizeOf(Buf), NumRead);
                         |            |               |    
           имя файла  куда кладем  скока кладем

Автор: Ddddddelphi 7.12.2004, 13:32
Sizeof(buf) указываю 20 и не получаю чего хочу, а цикл по-моему должен оставаться прежним или ещё один цикл нужен
Код



var
FromF, ToF: file;
NumRead, NumWritten: Integer;
Buf: array[1..20] of Char;
begin
AssignFile(FromF, 'c:\a.txt');
Reset(FromF, 1);
AssignFile(ToF, 'c:\b.txt');
Rewrite(ToF, 1);
repeat
BlockRead(FromF, Buf, sizeof(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0);
CloseFile(FromF);
CloseFile(ToF);

end;

Автор: Akina 7.12.2004, 13:57
Боюсь что при блочном чтении в поток попадут переводы строки.

Алгоритм:
Код

Открываем источник на чтение
Открываем приемник на запись
tmpStr1="";
tmpStr2="";
Пока не достигли конца файла-источника
  Читаем строку в tmpStr2
  tmpStr1=tmpStr1 + tmpStr2
  Пока длина tmpStr1 больше 19
     tmpStr2=первые 20 байт tmpStr1
     tmpStr1=все байты tmpStr1 после 20-го
     Пишем tmpStr2
Пишем tmpStr1
Закрываем файлы
Завершаем программу


Автор: Ddddddelphi 7.12.2004, 16:47
да весело читать...... smile
Код

var s1,s2:string;
    f1,f2:textfile;
   begin
assignfile(f1,'beg.txt');
reset(f1);
assignfile(f2,'end.txt');
rewrite(f2);
while not eoln(f1) do
begin
readln(f1,s1);
repeat
s2:=copy(s1,1,5);
writeln(f2,s2);
delete(s1,1,5);
until length(s1)=0;
  end;
  closefile(f1);
  closefile(f2);
  end;
end.


Автор: SlaUr 8.12.2004, 05:44
Код

var List1,List2:tstringlist
i1:integer;St1,St2:string;

List1:=TstringList.Create;
List2:=TstringList.Create;

List1.LoadFromFile('c:\myfile.txt');
i1:=0;St1:='';

While i1<list1.Count do
begin
St1:=St1+List1[i1];
While length (St1)>=20 do
  begin
    St2:=Copy(St1,1,20);
    if length(St1)>20 then St1:=Copy(St1,21,length(St1))
    List2.Add(St1);
  end;
Inc(i1);
end;
if St1<>'' then List2.Add(St1);
List2.SaveToFile('c:\myfileNew.txt');
List1.Free;
List2.Free;


Вроде все должно работать

Автор: Ddddddelphi 8.12.2004, 10:05
SlaUr, неа не работает, прсто копирует один файл в другой, а мой котрый я написал перед твоим и было моё решение
- всем сенкс smile

Автор: SlaUr 8.12.2004, 13:16
Да не много я не то написал Вот проверенный код:
Код

procedure TForm1.Button1Click(Sender: TObject);
var List1,List2:tstringlist;
i1:integer;St1,St2:string;
begin
List1:=TstringList.Create;
List2:=TstringList.Create;

List1.LoadFromFile('1.txt');
i1:=0;St1:='';

While i1<list1.Count do
begin
St1:=St1+List1[i1];
While length (St1)>=20 do
 begin
   St2:=Copy(St1,1,20);
   if length(St1)>20 then St1:=Copy(St1,21,length(St1)) else St1:='';

   List2.Add(St2);
 end;
Inc(i1);
end;
if St1<>'' then List2.Add(St1);
List2.SaveToFile('2.txt');
List1.Free;
List2.Free;

end;



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