Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ Как переписать все строки, начиная
Автор: 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
Зачем умножать сущности и приплетать к простой задаче директивы компилятора? Моя версия немного покороче. Можешь сдавать не проверяя
Код
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
Спасибо, дружище, я уже догадался !!