Помощь - Поиск - Пользователи - Календарь
Полная версия: Из текстового файла удалить строки, состоящие из одинаковых литер
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Agerest
Дан текстовый файл G. Откорректировать его, удаляя строки, состоящие из одинаковых литер. Напечатать номера удаляемых строк. Помогите пожалуйста, заранее спасибо)
Вроде понимаю паскаль и текстовые файлы в том числе, но справиться с этой задачей не могу.
Федосеев Павел
Раз понимаете, сделайте часть программы с чтением файла и выводом на экран номера строки и самой строки без какой-либо обработки.
Это будет первый этап. Следующий этап - я помогу с удалением строк.
Agerest
Цитата(Федосеев Павел @ 15.12.2016 12:07) *

Раз понимаете, сделайте часть программы с чтением файла и выводом на экран номера строки и самой строки без какой-либо обработки.
Это будет первый этап. Следующий этап - я помогу с удалением строк.

Спасибо большое, что ответили. Вот я сделал эту часть программы:
Код

Var F: Text;
      l, i: integer;
      s:string;
begin
  Assign ( F, 'F:/text.txt' );
  reset(f); l:=0;
  while not eof(f) do begin
    l:=l+1;
    while not eoln(f) do begin
      read(f,s);
      write('Строка №',l,': '); writeln(s);
      readln(f);
      l:=l+1;
    end;
  close(f); readln;
  end;
end.
Федосеев Павел
Только осторожнее - исходный файл модернизируется и прежнюю информацию из него уже не вернуть.
program Files;

function VariousChars(s: string): boolean;
var
i: integer;
Res: boolean;
begin
Res := (length(s) <= 1);
for i := 2 to length(s) do
Res := Res or (s[1] <> s[i]);
VariousChars := Res;
end;

var
G, TempFile: Text;
SourceFileName: string;
TempFileName: string;
LineNumber: integer;
s: string;
begin
SourceFileName := 'text.txt';
TempFileName := 'temp.txt';
Assign(G, SourceFileName);
reset(G);
Assign(TempFile, TempFileName);
rewrite(TempFile);

LineNumber := 0;
while not EOF(G) do
begin
readln(G, s);
Inc(LineNumber);
if VariousChars(s) then
writeln(TempFile, s)
else
writeln(LineNumber);
end;
Close(TempFile);
Close(G);
Erase(G);
Rename(TempFile, SourceFileName);
end.
Agerest
Цитата(Федосеев Павел @ 15.12.2016 23:02) *

Только осторожнее - исходный файл модернизируется и прежнюю информацию из него уже не вернуть.
program Files;

function VariousChars(s: string): boolean;
var
i: integer;
Res: boolean;
begin
Res := (length(s) <= 1);
for i := 2 to length(s) do
Res := Res or (s[1] <> s[i]);
VariousChars := Res;
end;

var
G, TempFile: Text;
SourceFileName: string;
TempFileName: string;
LineNumber: integer;
s: string;
begin
SourceFileName := 'text.txt';
TempFileName := 'temp.txt';
Assign(G, SourceFileName);
reset(G);
Assign(TempFile, TempFileName);
rewrite(TempFile);

LineNumber := 0;
while not EOF(G) do
begin
readln(G, s);
Inc(LineNumber);
if VariousChars(s) then
writeln(TempFile, s)
else
writeln(LineNumber);
end;
Close(TempFile);
Close(G);
Erase(G);
Rename(TempFile, SourceFileName);
end.


Кажется не работает. Может где-то ошибка?
Федосеев Павел
Кому кажется, как не работает, чем компилировали?
Гость
Цитата(Федосеев Павел @ 17.12.2016 5:42) *

Кому кажется, как не работает, чем компилировали?

PascalABC. Все без ошибок, но программа не удаляет строки с одинаковыми литерами
Федосеев Павел
Вот прямо только что проверил работу программы (правда, у меня FreePascal).
Сделал файл text.txt
Цитата
sdkjfhskdjfks
ddkksdjhfkjskdf
ddddddddd dddddddd
v
-=============
===========-
11111111111
er
444

Запустил программу, на экран вывелось
Цитата
7
9

После открытия файла 'text.txt' увидел
Цитата
sdkjfhskdjfks
ddkksdjhfkjskdf
ddddddddd dddddddd
v
-=============
===========-
er
Agerest
Цитата(Федосеев Павел @ 17.12.2016 15:43) *

Вот прямо только что проверил работу программы (правда, у меня FreePascal).
Сделал файл text.txt
Цитата
sdkjfhskdjfks
ddkksdjhfkjskdf
ddddddddd dddddddd
v
-=============
===========-
11111111111
er
444

Запустил программу, на экран вывелось
Цитата
7
9

После открытия файла 'text.txt' увидел
Цитата
sdkjfhskdjfks
ddkksdjhfkjskdf
ddddddddd dddddddd
v
-=============
===========-
er


Ой, я не так смысл задачи понял просто. Я думал программа должна удалять строки, в которых одинаковые литеры, например строки: 56, 23, 56. И она должна удалить 1 и 3 строку. Но теперь я разобрался. Спасибо большое)

Добавлено через 3 мин.
Почему я репутацию повысить не могу? Хмм
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.