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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 17:54   #1
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию файл типа string

Получил задание следующего содержания: "Есть текстовый файл. Каждая строка <=255 символов. Нужно:
1) выровнять строки до одной длины используюя пробелы
2) переписать этот txt в типизированый файл типа string"

С первой частью все относительно понятно, но когда пытаюсь объявить типизированый файл компелятор ругается

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  f:file of string;
begin
writeln('what ever');
readln
end.
В окне Structure ошибок нет, а снизу, в Messages, после попытки запуска пишет
Код:
[DCC Error] Project1.dpr(8): E2155 Type 'string' needs finalization - not allowed in file type
Несмотря на то, что с английским я в общем то дружу, смысл этой фразы остается для меня непонятным. Подскажите в чем ошибка, желательно простейший исходник.

Кстати, если то же самое написать в FreePascal, то проблем не возникает.
P.S. Я пишу в Delphi 2009
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 15.12.2009, 17:59   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
var f:file of string[255];
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 15.12.2009, 19:54   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

>_< А ведь проскакивала мысль, но почемуто не попробовал. Спасибо Greblin.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 15.12.2009, 21:30   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

В продолжение темы. Программу написал:
Код:
program doesntmatter;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type
  stroka=string[255];
var
  T:text;
  F:file of string[255];
  i:integer;
  S,Sempty:stroka;
begin
//проверка
  assign(T,'ishodnik.txt');
  assign(F,'resultat.txt');
{$i-}
  reset(T);
  rewrite(F);
{$i+}
  if IOResult<>0 then
    begin
      writeln('Files are not found');
      readln;
      HALT;
    end;

//начало
  for i:=1 to 255 do
    Sempty[i]:=' ';
  while not EOF(T) do
    begin
      readln(T,S);
      insert(Sempty,S,length(s));
      write(F,S); //вот тут проблема
    end;
close(T);
closefile(F);

END.
Как я понел, в типизированных файлах нельзя пользоваться readln и writeln (Can't use readln or writeln on typed file).

Возникает вопрос: как осуществить переход на новую строку?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 15.12.2009, 21:36   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
write(F, #13#10);
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 15.12.2009, 22:13   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
Смущение

Я дико извиняюсь, но можно подробнее? Что есть 13 и 10, и зачем решетка?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 15.12.2009, 22:42   #7
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

13 и 10 - это коды символов перевода строки и возврата каретки (\r\n). #13#10 - строка из этих двух символов
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 15.12.2009, 22:51   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Так этот файл of String[255], зачем там переходы на новую строку? Там набор строк, в начале каждой - длина, так же, как в памяти, хранятся.
Somebody вне форума Ответить с цитированием
Старый 15.12.2009, 23:10   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Так этот файл of String[255], зачем там переходы на новую строку? Там набор строк, в начале каждой - длина, так же, как в памяти, хранятся.
Вот я так же подумал, однако открываю блокнотом - и там переход на новую строку только после 1024 символов, и то, видимо, только потому, что в блокноте строки длиннее не бывают. А если все копировать и вставить в notepad++ то там вообще одна длиннюююююющая строка получается.

Да, поставив write(F, #13#10); после write(F,S); получаю:

Код:
[DCC Error] begining.dpr(37): E2010 Incompatible types: 'ShortString' and 'string'
Мне кажется 13 и 10 заменить на что то надо, чтоб тип String получился, хотя хз, с такой формой записи сталкиваюсь впервые.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 15.12.2009, 23:27   #10
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

попробуйте сначала к строке прибавить 10,13. а потом в файл пихать.
хотя должно работать и без этого
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив типа string dollemika Помощь студентам 13 02.05.2009 23:15
Конвертация типа string в int Mixasik Общие вопросы C/C++ 10 25.04.2009 02:58
считать данные из переменной типа String 1o1man Помощь студентам 13 17.04.2009 22:34