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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 20:06   #1
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию Pascal. Работа с нетипизированными файлами.

Здравствуйте, нужна помощь в решении задачи.
Дан текстовый файл с данными о посылках: город, улица, дом, квартира, фамилия ценность. Вывести на экран сведения о посылках. Вывести в текстовые файлы списки посылок по городам.

P.S. Нужна помощь именно с распределением одинаковых городов по файлам, т.е. как сделать, чтобы одинаковые города находились в разных файлах, сам цикл с этим сравнением.. Не обязательно весь код, хотя бы подсказку или ту часть, в которой будут определяться одинаковые города и их запись.
Спасибо заранее.
H4t вне форума Ответить с цитированием
Старый 10.03.2013, 21:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

всё зависит от множества мелких, конкретных деталей.
Например, очень важной деталью является КОЛИЧЕСТВО записей о посылках.
Если количество записей позволяет разместить их в памяти, тогда, один из возможных способов решения:
читаем текстовый файл в память (либо в массив записей, либо в дин.структуру).
сортируем записи по городам.
Берём город из первой записи отсортированного списка в переменную CurrentCity.
Пишем в файл "город" == CurrentCity,
в цикле читаем и выводим записи, пока город записи равен CurrentCity.
Как только город изменился, новый город в переменную CurrentCity и повторяем цикл.
всё.

p.s. если сортировать записи не желательно, то можно и без сортировки обойтись. Алгоритм тоже простой, просто менее эффективен..


p.p.s. чем больше вашего кода на форуме, тем больше конкретных ответов Вы получите...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2013, 21:16   #3
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
всё зависит от множества мелких, конкретных деталей.
Например, очень важной деталью является КОЛИЧЕСТВО записей о посылках.
Если количество записей позволяет разместить их в памяти, тогда, один из возможных способов решения:
читаем текстовый файл в память (либо в массив записей, либо в дин.структуру).
сортируем записи по городам.
Берём город из первой записи отсортированного списка в переменную CurrentCity.
Пишем в файл "город" == CurrentCity,
в цикле читаем и выводим записи, пока город записи равен CurrentCity.
Как только город изменился, новый город в переменную CurrentCity и повторяем цикл.
всё.

p.s. если сортировать записи не желательно, то можно и без сортировки обойтись. Алгоритм тоже простой, просто менее эффективен..


p.p.s. чем больше вашего кода на форуме, тем больше конкретных ответов Вы получите...
Не совсем понял про количество записей, да и способ решения должен быть гораздо проще.. явно без сортировок и динамических структур.
К примеру: есть текстовый файл, в 1 строке содержится информация об 1 посылке. Можно взять строковую переменную и выделить под неё к примеру 10 символов, это будет название города, все, что нужно - сделать их запись файл, чтобы одинаковые города были в одинаковых файлах.
H4t вне форума Ответить с цитированием
Старый 10.03.2013, 21:23   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
type TPo4ta = record
town:string[40];
//и тд все поля
end;
var p:array[1..100] of TPo4Ta;
Код:
For i:=1 to postcount do
begin
assign(f,P[i].town+'.txt');
// тут проверочку на существование файлика прикрутите
reset(f);
writeln(f,p[i].town);
// ну и так далее все поля посылки
close(f);
end;

// и в папке с вашей программой появятся txt с названиями городов ну а в них списки
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 10.03.2013 в 21:30.
Mad_Cat вне форума Ответить с цитированием
Старый 10.03.2013, 21:27   #5
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Вот код, без основного алгоритма, идеи были, но все упиралось в то, что всегда указывается конкретное имя файла и не получается написать условие, для распределения всех городов.
Код:
type
 post=record
      town: string[10];
      strt: string;
      ndom: integer;
      numb: integer;
      name: string;
      pric: integer;
end;

var ved:post;
    F1,F2,F3,F4:text;
    i:integer;

Begin
 assign(F1,'путь к файлу');
 assign(F2,'путь к файлу');
 assign(F3,'путь к файлу');
 assign(F4,'путь к файлу');
 reset(F1);
 rewrite(F2);
 rewrite(F3);
 rewrite(F4);

 while not eof(F1) do begin
  readln(F1,stroka);
  writeln(stroka);   {Вывод сведений на экран}
 end;
 
 
 while not eof(F1) do
  with ved do begin
  read(F1,town);
  readln(F1,strt,ndom,numb,name,pric);
  {Основной алгоритм}
  end;

 close(F1);
 close(F2);
 close(F3);
 close(F4);
End.
Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
Код:
For i:=1 to postcount do
assign(f,P[i].town+'.txt');
// тут проверочку на существование файлика прикрутите
reset(f);
writeln(f,p[i].town);
Извиняюсь за глупые вопросы, совсем новичок в работе с файлами, но разве если я укажу 3 одинаковых города, то у меня будет 1 файл, в котором указано 3 этих города с информацией а них, а не 3 файла? И как в таком случае должна выглядеть информация в первоначальном файле.
К примеру:
город улица дом квартира фамилия ценность
город2 улица2 дом2 квартира2 фамилия2 ценность2
город улица3 дом3 квартира3 фамилия3 ценность3
город4 улица4 дом4 квартира4 фамилия4 ценность4
город2 улица5 дом5 квартира5 фамилия5 ценность5
У меня должно получится 3 файла - Город, Город2 и Город4, либо 5 файлов, если я не так понял условие >_<
При том в вашем коде запись идет в тот же файл, из которого считывается информация, и будет ли создаваться новый файл, после того как все поля записи с индексом 1 будут записаны?

Последний раз редактировалось Stilet; 11.03.2013 в 09:23.
H4t вне форума Ответить с цитированием
Старый 10.03.2013, 21:44   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
У меня должно получится 3 файла - Город, Город2 и Город4
так и получится
Цитата:
И как в таком случае должна выглядеть информация в первоначальном файле
так как вам удобнее ее разбирать
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 10.03.2013, 21:54   #7
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
так и получится
Т.е. при существовании файла с таким же именем, вместо создания нового запись идет в тот же?
И еще 1 вопрос, ваш код:
Код:
reset(f);
writeln(f,p[i].town);
f - имя файла, в который нужно записать информацию, у вас также это имя файла, с которого она считывается, т.е.
Код:
assign(f,P[i].town+'.txt');
наличие его в цикле позволяет каждый раз связывать файловую переменную с новым именем файла и создавать файл? Очень хитро получается , значит нужно только переименовать выделенную мной f на имя первоначального файла, или я что-то не так понимаю?
P.S. Большое спасибо за код ^^
H4t вне форума Ответить с цитированием
Старый 10.03.2013, 22:03   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да, совершенно верно, можно и так поступить!
Единственно, что текстовый файл на дозапись нужно открывать процедурой
Код:
append(f)

H4t, какой у Вас Паскаль?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2013, 22:12   #9
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
у вас также это имя файла, с которого она считывается
кстати считывания информации нет в моем примере, так что не обязательно)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 10.03.2013, 22:41   #10
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да, совершенно верно, можно и так поступить!
Единственно, что текстовый файл на дозапись нужно открывать процедурой
Код:
append(f)

H4t, какой у Вас Паскаль?
АВС, можно поподробней про append?

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
кстати считывания информации нет в моем примере, так что не обязательно)
да, не заметил, что это просто открытие по чтению, мне нужно добавить просто считывание строки?

Последний раз редактировалось Stilet; 11.03.2013 в 09:19.
H4t вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с нетипизированными указателями/файлами Christor Общие вопросы C/C++ 8 09.07.2012 16:50
Delphi. Динамический массив при работе с нетипизированными файлами Arrow_S Помощь студентам 10 06.04.2012 22:19
работа с файлами (pascal) zenid Помощь студентам 1 26.12.2011 16:18
Pascal/ работа с файлами V@dlo Помощь студентам 1 14.11.2009 19:55
Работа с нетипизированными файлами JustKurt Общие вопросы Delphi 4 18.07.2009 10:46