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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 23:03   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пример программы
Код:
type
 post=record
      town: string[10];
      strt: string;
      ndom: integer;
      numb: integer;
      name: string;
      pric: integer;
end;

const
   PathToFiles = 'D:\PABCWork\';

var ved:post;
    F1, fTown :text;
    sTownFileName : string;
    i:integer;
begin

  {тут открытие файла F1 на чтение}
  Assign(F1, PathToFiles + 'test1.txt');
  Reset(F1);
  
  {основной цикл программы}
  while not eof(F1) do
    with ved do begin
       readln(F1,town {, strt  и т.д.});
       sTownFileName := PathToFiles + trim(town)+'.txt';
       Assign(fTown, sTownFileName);
       if FileExists(sTownFileName)
         then Append(fTown)  {файл найден - будем дозаписывать в него данные}
         else Rewrite(fTown); {файла не было - создаём новый}
       WriteLn(fTown,  town,' ', trim(strt), ' ', ndom:5,' ',numb:5,' ',trim(name),' ',pric:5,' ');
       Close(fTown);
    end;

  Close(F1);

end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2013, 23:30   #12
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Огромное спасибо, я почему-то все думал, как сделать через сравнение городов, через отдельные переменные, а здесь в основе записи

Код:
type
 post=record
      town: string[10];
      strt: string;
      ndom: integer;
      numb: integer;
      name: string;
      pric: integer;
end;

const
   PathToFiles = 'C:\Program Files\PABC\';

var ved:post;
    F1, fTown :text;
    sTownFileName,stroka : string;
    i:integer;
begin

  Assign(F1,'C:\Program Files\PABC\File_1.txt');
  Reset(F1);
  
  while not eof(F1) do begin
   readln(F1,stroka);
   writeln(stroka);   
  end;
  
 
  while not eof(F1) do
    with ved do begin
       readln(F1,town,strt,ndom,numb,pric);
       sTownFileName:=PathToFiles+trim(town)+'.txt';
       Assign(fTown,sTownFileName);
      if FileExists(sTownFileName)
         then Append(fTown)  
         else Rewrite(fTown); 
       WriteLn(fTown,  town,' ', trim(strt), ' ', ndom:5,' ',numb:5,' ',trim(name),' ',pric:5,' ');
       Close(fTown);
    end;

  Close(F1);

end.
Почему-то не создает файлы, хотя путь указан правильно, да и с остальным вроде все впорядке.
Serge_Bliznykov, 1 вопрос, что означает trim? trim(town), trim(strt), заметил только, что он используется для переменных типа string

Последний раз редактировалось Stilet; 11.03.2013 в 09:16.
H4t вне форума Ответить с цитированием
Старый 11.03.2013, 00:01   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

trim() - функция, которая удаляет пробелы в начале и конце строки.
В Pascal ABC есть встроенная подсказка, рекомендую незнакомые процедуры и функции смотреть в ней. На крайний случай, можно и погуглить. Нет, мне не трудно ответить, просто Вы бы быстрее могли посмотреть описание функции самостоятельно, чем ждать ответа на форуме...


Цитата:
Почему-то не создает файлы, хотя путь указан правильно, да и с остальным вроде все впорядке.
во-первых, Вы забыли после вывода всех записей из файла, переустановить указатель на начало файла.
Код:
while not eof(F1) do begin
   readln(F1,stroka);
   writeln(stroka);   
  end;
  
  Reset(f1);
 
  while not eof(F1) do
Во-вторых, при чтении из исходного файла у Вас, скорее всего, будут проблемы.
Потому как при выводе на экран Вы читаете всё строчку целиком, не разбирая её на отдельные элементы. Вот, когда будете читать в отдельные элементы
Цитата:
Код:
readln(F1,town,strt,ndom,numb,pric);
Вас ожидают неприятные сюрпризы..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.03.2013, 00:02   #14
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

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

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

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

А что касается
Код:
readln(F1,town,strt,ndom,numb,name,pric);
не могли бы вы поподробней? т.е. как лучше сделать считывание информации из файла

Исправил, всё хорошо, создает файлы, города записывает как нужно, но появилась другая проблема, выдает ошибку »*106: неверный числовой формат при вводе, удалял переменные типа integer - сообщение об ошибке пропадает, т.е. что-то не так с вводом чисел, они просто отделены пробелами друг от друга/строковых переменных.
Пример:
city_1 zzzzzzzzzz 1 11 qqq 10000
city_2 xxxxxxxxxx 2 12 www20000
city_1 ccccccccc 3 13 eee 30000
city_1 vvvvvvvvv 4 14 rrr 40000
city_3 bbbbbbbbb 5 15 xxx 50000
city_2 nnnnnnnnn 6 16 ttt 60000
Что именно вызывает ошибку?
P.S. Понимаю, что наверное уже очень надоел

Последний раз редактировалось Stilet; 11.03.2013 в 09:18.
H4t вне форума Ответить с цитированием
Старый 11.03.2013, 09:00   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
выдает ошибку »*106: неверный числовой формат при вводе, удалял переменные типа integer - сообщение об ошибке пропадает, т.е. что-то не так с вводом чисел,
точно. об этом я Вам и намекал в сообщении #16

прочитайте переменные без числовых значений, выведите их содержимое на экран.
Попытайтесь сделать выводы!


Цитата:
При выводе на экран ведь нет разницы читать всю строчку целиком или на отдельные элементы, визуально разницы нет,
точно так. Но в этом случае Вы не видите, что у вас читается в ваши переменные. А читается в них СОВСЕМ не то, что Вы ожидаете...



hint. у вас всё, что после города читается в переменную strt, ибо она покрывает вашу строчку в файле полностью, вместе со всеми переменными..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.03.2013, 12:41   #17
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
точно. об этом я Вам и намекал в сообщении #16

прочитайте переменные без числовых значений, выведите их содержимое на экран.
Попытайтесь сделать выводы!



точно так. Но в этом случае Вы не видите, что у вас читается в ваши переменные. А читается в них СОВСЕМ не то, что Вы ожидаете...



hint. у вас всё, что после города читается в переменную strt, ибо она покрывает вашу строчку в файле полностью, вместе со всеми переменными..
Пробовал выводить на экран просто город, выводит, но если же попытаться сделать:
Код:
   Readln(F1,town,strt);
   Writeln(town,strt);
то выводит все равно только город, хотя выделил под неё тоже 10 символов, чтобы не считывало всю строку..
Выделял количество символов под все строковые переменные, чтобы считывало ровно улицу или фамилию, все равно выдает подобную ошибку, т.е. я думаю, что если у меня описано
Код:
 town: string[10];
      strt: string[10]
и я вывожу их на экран последовательно, то он считывает 10 символов для города, выводит на экран, а дальше не понятно.
H4t вне форума Ответить с цитированием
Старый 11.03.2013, 14:19   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
type
 post=record
      town: string[10];
      strt: string[10];
      ndom: integer;
      numb: integer;
      name: string;
      pric: integer;
end;

const
   PathToFiles = 'C:\Program Files\PABC\';
//   PathToFiles = 'C:\PABCWork\';

var ved:post;
    F1, fTown :text;
    sTownFileName,stroka : string;
    i:integer;
    s, s2 : string;
    k  : integer;
begin

  Assign(F1,PathToFiles + 'File_1.txt');
  Reset(F1);

  WriteLn('Содержимое файла: ');
  while not eof(F1) do begin
   with ved do begin
     readln(F1, s);
     town := Trim(Copy(s,1,10));
     strt := Copy(s, 11, 10);
     s2 := Copy(s, 21, 4);
     val(s2, ndom, k);
     s2 := Copy(s, 25, 6);
     val(s2, numb, k);
     name := Copy(s, 32, 3);
     s2 := Copy(s, 36, Length(s)-36+1);
     val(s2, pric, k);
     writeln(town,' ', strt, ' ', ndom:5,' ',numb:5,' ',name,' ',pric:5);
     
     // сразу и запишем в файл по городам
     sTownFileName:=PathToFiles+trim(town)+'.txt';
     Assign(fTown,sTownFileName);
     if FileExists(sTownFileName)
         then Append(fTown)
         else Rewrite(fTown);
     WriteLn(fTown,  town,' ', trim(strt), ' ', ndom:5,' ',numb:5,' ',trim(name),' ',pric:5,' ');
     Close(fTown);

   end;
  end;
  
  Close(F1);

end.
файл File_1.txt
Код:
city_1    zzzzzzzzzZ   1    11 qqq 10000
city_2    xxxxxxxxxZ  22    12 www 20000
city_1    cccccccccA   3   130 eee 30000
city_1    vvvvvvvvvB 457    14 rrr 40000
city_3    bbbbbbbbbC   5   105 xxx 50000
city_2    nnnnnnnnnD   6  1621 ttt 60000
Вложения
Тип файла: rar example.rar (760 байт, 7 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.03.2013, 16:38   #19
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию

Еще раз спасибо . Почему-то сам не мог догадаться сделать через pos >_<
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