IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Из текстового файла удалить строки, состоящие из одинаковых литер
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Дан текстовый файл G. Откорректировать его, удаляя строки, состоящие из одинаковых литер. Напечатать номера удаляемых строк. Помогите пожалуйста, заранее спасибо)
Вроде понимаю паскаль и текстовые файлы в том числе, но справиться с этой задачей не могу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


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





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(Федосеев Павел @ 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Только осторожнее - исходный файл модернизируется и прежнюю информацию из него уже не вернуть.
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(Федосеев Павел @ 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.


Кажется не работает. Может где-то ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Кому кажется, как не работает, чем компилировали?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(Федосеев Павел @ 17.12.2016 5:42) *

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

PascalABC. Все без ошибок, но программа не удаляет строки с одинаковыми литерами
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


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

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

После открытия файла 'text.txt' увидел
Цитата
sdkjfhskdjfks
ddkksdjhfkjskdf
ddddddddd dddddddd
v
-=============
===========-
er
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(Федосеев Павел @ 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 мин.
Почему я репутацию повысить не могу? Хмм
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 5:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name