Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2010, 19:15   #1
Leona180991
 
Аватар для Leona180991
 
Регистрация: 25.12.2009
Сообщений: 6
По умолчанию Текстовые файлы в паскале. Как всегда нужна помощь=)))

Привет всем! Нужна естесственно помощь. Вот такое RGR: Сформировать текстовый файл, содержащий строки исходного файла, встречающиеся в нем один раз. Вывести содержимое файлов на экран. В программе используются подпрограммы.

Смогла сделать прогу, которая копирует строки из 1 файла во 2. но нужен счетчик, который бы отсортировывал одинаковые строки и оставлял по одному образцу. Помогите составить такую процедуру или функцию.

Код:
program primer;                                                              
Var f1,f2:text;                                                               
  i,n:integer;                                                                
  s:string;                                                                   
begin {формируем 1 файл}                                                      
  Assign(f1,'G:\ln.txt'); {устанавливаем связь файловой переменной с физически
  Rewrite(f1); {открываем файл для записи}                                    
  Readln(n); {определеяем количество вводимых строк}                          
  for i:=1 to n do                                                            
  begin                                                                       
    readln(s); {вводим с клавиатуры строки}                                   
    writeln(f1,s); {записываем последовательно строки в файл}                 
  end;                                                                        
  close(f1); {заканч раб с 1 файлом, теперь на диске сущ файл с именем file1.t
                                                                              
 {чтение из первого файла и формирование второго}                             
  Reset(f1); {открываем первый файл для чтения}                               
  Assign(f2,'G:\kp.txt'); {устанав связь 2 файловой переменной с физич файлом}
 Rewrite(f2); {открываем 2 файл для записи}                                  
                                                                            
 {последовательно считываем строки из 1 файла}                               
  While not eof(f1) do                                                        
  begin                                                                       
    Readln(f1,s); {считываем очередную строку из 1 файла}                     
    Writeln(f2,s); {записываем во 2 файл строки}                              
  End;                                                                        
  Close(f1);                                                                  
  Close(f2); {заканчиваем работу с файлами}                                   
                                                                              
  {выводим на экран 2 файл}                                                   
  Writeln;                                                                    
  Writeln('второй файл содержит строки:');                                    
  Reset(f2); {открываем 2 файл для чтения}                                    
  While not eof(f2) do {пока не конец 2 файла}                                
  begin                                                                       
    Readln(f2,s); {считываем очередную строку из файла}                       
    Writeln(s); {выводим строку на экран}                                     
  End;                                                                        
End.

Последний раз редактировалось Stilet; 03.08.2010 в 09:10.
Leona180991 вне форума Ответить с цитированием
Старый 03.08.2010, 00:31   #2
W.i.d.g.e.t.1
Пользователь
 
Аватар для W.i.d.g.e.t.1
 
Регистрация: 09.07.2010
Сообщений: 65
По умолчанию

Так проверяйте равенство, если две переменных совпадают, то удаляйте строку. оО
Только тогда каждую строку надо какой нить переменной стринговой присваивать. Их и сравнивать. А строки разделять, пробелом тем же.
а в конце окажется, что все проблемы были из-за дивана, что стоял не по фэн-шую...

Последний раз редактировалось W.i.d.g.e.t.1; 03.08.2010 в 06:36. Причина: читала криво вопрос.
W.i.d.g.e.t.1 вне форума Ответить с цитированием
Старый 03.08.2010, 08:47   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

добавлю.
Задача может быть решена двумя способами.
1) быстрый и эффективный, но имеющий ограничение по количеству допустимых строк в исходном файле.
2) медленный и неэффективный, но зато имеющий возможность обрабатывать файлы с ЛЮБЫМ количеством строк.

итак. Первый способ.
Заводим массив строк.
Например,
Код:
var  SArray : array[1..250] of string;
потом считываем полностью исходный файл в этот массив и дальше поиск каждой строки в данном массиве. Если строка встречается один раз, тогда пишем её в выходной файл.
Недостатки: если файл содержит больше строк, чем размерность массива, то такой алгоритм не сможет обработать файл (надо проверять и выдавать соответствующей сообщение).

2-й способ.
Открываем файл. Читаем из него одну строчку. Запоминаем номер строки.
Устанавливаем файл на начало.
Дальше в цикле читаем все строки, сравнивая с текущей.
Если достигли конца исходного файла и строка встретилась один раз, то пишем эту строчку в выходной файл.
Дальше переходим на номер запомненной строки, читаем следующую строчку и т.д.

Маленький хинт - если в цикле подсчёта строк, строка встретилась второй раз, то цикл можно прерывать и переходить на проверку следующей строчки.

Работать это будет крайне медленно и печально! Зато для любых файлов.
При реализации второго способа лучше использовать не текстовые файлы, а бинарные, в них легко позиционироваться на любую позицию в файле. Но тогда надо написать свои процедурки по выделению строк из читаемого буфера.

p.s. если Вам не горит (и, конечно, если не разберётесь самостоятельно), то можно и примерчик решения набросать....

p.p.s. при оформлении кода ОБЯЗАТЕЛЬНО используйте тег [СODE].. [/CODE] - это кнопочка с решёточкой (#)...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.08.2010, 14:06   #4
Leona180991
 
Аватар для Leona180991
 
Регистрация: 25.12.2009
Сообщений: 6
По умолчанию

Да, если не сложно, то лучше примерчик=) Так все-таки понятнее будет. А в мою прогу не получится процедуру вставить, что бы отсортировывала строки? Ее нужно полностью переделать?
Leona180991 вне форума Ответить с цитированием
Старый 04.08.2010, 14:41   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
{чтение из первого файла и формирование второго}
procedure swap;
var
    MasOfString: array[1..200] of string;
    i, j, Flag: integer;
    s: string;
begin
  Assign(f1,'file.txt');                             
  Reset(f1);                               
  Assign(f2,'G:\kp.txt'); 
  Rewrite(f2);
  i:= 1;
  j:= 1;                                                                 
  While not eof(f1) do                                                        
  begin                                                                       
    Readln(f1,s);
    if i = 1 then MasOfString[1] := s;
    if i = 200 then break;
    Flag := 0;
    for j := 1 to i do
        if s = MasOfString[j] then Flag := 1;
    if  Flag <> 1 then
    begin
        MasOfString[i+1] := s;
        Writeln(f2,s); 
    end;
    Inc(i);                              
  end;                                                                        
  Close(f1);                                                                  
  Close(f2);                                    
end;
Тока сразу говорю не тестил!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303

Последний раз редактировалось Hacker19_90; 04.08.2010 в 14:43.
Hacker19_90 вне форума Ответить с цитированием
Старый 04.08.2010, 17:08   #6
Leona180991
 
Аватар для Leona180991
 
Регистрация: 25.12.2009
Сообщений: 6
По умолчанию

Спасибо=) Ничего, сейчас буду тестить!
Leona180991 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
текстовые файлы в паскале MetR Помощь студентам 9 12.06.2010 10:38
Текстовые файлы в паскале Nc1ty_SoBoL Помощь студентам 2 30.06.2009 19:49
Файлы нужна помощь trew Помощь студентам 3 10.02.2009 18:38
Нужна помощь не решении задачи (файлы). VirtualPC Паскаль, Turbo Pascal, PascalABC.NET 0 20.12.2008 15:18
текстовые файлы ОЧЕНЬ НУЖНА ПОМОЩЬ leest Помощь студентам 6 30.01.2008 10:05