Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Как переписать все строки, начиная

Автор: Nemo 13.12.2003 1:56

Код
Uses
      CRT, Dos;
const
      FName1 = 'OutPut.txt';
      FName2 = 'Input.txt';
var
       F1, F2  : file;
       buf      : pointer;
       count  : longint;
       num    : longint;
begin
       WriteLn('Введите номер символа:');
       ReadLn(num);
       Assign(F1, FName);
       Assign(F2, FName);
       Reset(F1, 1);
       Reset(F2, 1);
       Seek(F1, num-1);
       count:=FileSize(F1)-Num+1;
       GetMem(buf, count);
       BlockRead(F1, buf^, count);
       BlockWrite(F2, buf^, count);
       FreeMem(buf, count);  
       Close(F1);
       Close(F2);
end.


PS:
Мог ощибиться - под рукой нет Паскаля.

Автор: KRUTOY 12.12.2003 19:06

:-[ :'(
ДРУЗЬЯ, помогите с файлами?? сроки жмут!! :-/
как скопировать все строки из данного файла в другой файл,начиная с заданного символа???
заранее благодарен!!

Автор: oleg309 12.12.2003 20:36

Да не зачто! ;D

Автор: Shadow 12.12.2003 21:35

прочитать с заданного символа информацию в память , буффер, массив
а потом записать его в файл
-=-=-=
позиционирование в файле с помощью оператор Seek вроде если не ошиб
=-===
или можно на ASM что проще

Автор: trminator 12.12.2003 22:13

А в чем, собственно, проблема? Или хочется готового решения? Программа получается строк 10, не больше. Выкладывай, что у тебя есть.

Автор: SKVOZNJAK 12.12.2003 22:58

На 38 строк тоже сделать можно  :)

Автор: KRUTOY 12.12.2003 23:03

Лучше бы, конечно, решение, потому как мои подборки, кажись, нерациональны, да и разобрать их трудно !!:

Код
Program proga5;
uses crt;
var
F,G:text;
a,b,c:array [1..20] of string;
i,j,h,k,z:integer;
S:char;
begin
 clrscr;
 writeln('Введите файл: ');
 i:=1;
 while not (a[i-1]='nomore') and (i<=10) do
 begin
 readln(a[i]);
 inc(i)
 end;
 assign(F,'F');
 {$I-}
 rewrite(F);
 {$I+}
 if IOResult<>0 then
 writeln('” файл не существует: ');
    i:=1;
  while not (a[i]='nomore') and (i<=10) do
  begin
   writeln(F,a[i]);
   inc(i)
  end;
   close(F);
   writeln('введиет символ: ');
   readln(S);
   reset(F);
   i:=1;
   k:=1;
  while not EOF(F) and  (i<=10) do
    for i:=1 to (h-1) do
        begin
        for j:=1 to length(c[i]) do
        read(F,c[i][j]);
        if (c[i][j]=S) then
        begin
        b[k]:=copy(c[i],j,(length(c[i])-j));
        for k:=(k+1) to (h-1) do
        b[k]:=c[i+1];
        end;
        end;
close(F);
assign(G,'G');
rewrite(G);
k:=1;
while (k<=10) and (k<>(h-1)) do
begin
writeln(G,b[k]);
inc(k)
end;
close(G);
{clrscr;
reset(G);
{end;}
readkey
end.

Автор: SKVOZNJAK 12.12.2003 23:35

Зачем умножать сущности и приплетать к простой задаче директивы компилятора? Моя версия немного покороче. Можешь сдавать не проверяя smile.gif

Код
var Q2,W2: LONGINT;
     Q7,W7: FILE;
     QSTR:STRING[12];
     QQ3: ARRAY[1..10000] OF BYTE;
     Q8: WORD;
     LABEL 1,100;
BEGIN
WRITELN('ВВЕДИТЕ ИМЯ ФАЙЛА-ИСХОДНИКА');
READ(QSTR);
WRITELN('ВВЕДИТЕ НОМЕР СИМВОЛА, НАЧИНАЯ С КОТОРОГО БУДЕТ КОПИРОВАТЬСЯ ФАЙЛ'); READ(Q2);
ASSIGN(Q7,QSTR);
ASSIGN(W7,'!!!_!');
RESET(Q7,1);
REWRITE(W7,1);
writeln('ДЛИНА ЧИТАЕМОГО ФАЙЛА ',filesize(q7));

W2:=FILESIZE(Q7)-Q2+1; {КОЛИЧЕСТВО КОПИРУЕМЫХ БАЙТ}
IF W2<0 THEN WRITELN('ХРЕНОВЫЙ ПАРАМЕТР !!!!');
DEC(Q2);
SEEK(Q7,Q2);
1: Q8:=10000;
IF W2<1 THEN GOTO 100;

IF W2<10000 THEN BEGIN
                               Q8:=W2;
                               W2:=0;
           END;
IF W2>=Q8 THEN W2:=W2-10000;
{WRITE('  AA'); }
BLOCKREAD (Q7,QQ3,Q8);
BLOCKWRITE(W7,QQ3,Q8);
GOTO 1;

100: {ВЫХОД}
WRITELN('');
WRITELN('ДЛИНА СОЗДАННОГО ФАЙЛА ',filesize(W7)); CLOSE(Q7);
CLOSE(W7);
WRITELN(' ГОТОВО');
END.

Автор: KRUTOY 12.12.2003 23:55

SKVOZNJAK
так я тоже думал...
так вот дело то в том,что файлы должны быть текстовыми??

Автор: trminator 13.12.2003 0:57

Код

var in_f, out_f : text;
   c, ToFind : char;
begin
 assign(in_f, 'c:tempFile2.txt'); reset(in_f);
 assign(out_f,'c:tempFile2.out'); rewrite(out_f);
 c:=#0; write('Ведите символ > '); readLn(ToFind);

 while (c <> ToFind) and (not eof(in_f))  do read(in_f, c); {Пропускаю ненужные символы}
 while not eof(in_f) do
 begin read(in_f,c); write(out_f, c) end;

 close(in_f); close(out_f)
end.

Может, подойдет? Только, похоже, тебе что-то немного другое нужно. Но это - то, про что ты спрашиваешь в этой теме

Автор: SKVOZNJAK 13.12.2003 1:02

Это поставлено в условие? Если да, то придётся кувыркаться, не отвертишься. Никогда не пользовался типизованными файлами - нетипизованные файлы позволяют выполнять все их функции + много других, только надо поковыряться в них ручками...

Автор: KRUTOY 13.12.2003 2:20

Проканало !!!!!!!!!
Спасибо вам за ответы !!! Есть еще на свете добрые люди !!

Добавлено (12.12.03 21:24):

Nemo
Спасибо, дружище, я уже догадался !! smile.gif