Syntax error, "." expected but "(" found

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Сообщение baklan » 25.10.2005 15:28:59

Просьба не сильно ругаться, подскажите новичку. Вот взял пример из документации
<span style='color:darkblue'>Program strlen ;
Uses strings ;
Const P : pchar = 'This i s a PCHAR string.';
begin
Writeln ( 'Наша строка = ' ,P) ;
Writeln ( 'Длина строки = ' ,StrLen(P)) ;
end.</span>

Просто хочу освоить функции, но вот что-то не выходит.... :(
Система FreeBSD 5.4 , выполняю команду
fpc str_len.pas
получаю ошибку
# fpc ./str_len.pas
Free Pascal Compiler version 2.0.0 [2005/05/15] for i386
Copyright © 1993-2005 by Florian Klaempfl
Target OS: FreeBSD/ELF for i386
Compiling ./str_len.pas
str_len.pas(6,37) Fatal: Syntax error, "." expected but "(" found
str_len.pas(6,37) Error: Compilation aborted
Error: /usr/local/bin/ppc386 returned an error exitcode (normal if you did not specifiy a source file to be compiled)


И не только с этой функцией такая же проблема.
И сразу еще одна просьба, при попытке сделать exe для win32 выполняю команду fpc -Twin32 file.pas
Получаю
Error: Util -as not found, switching to external linking
Куда копать?
baklan
новенький
 
Сообщения: 18
Зарегистрирован: 23.10.2005 21:07:00
Откуда: Москва

Сообщение SovNarKom » 25.10.2005 16:37:41

1. А почему прога называется strlen, а файл str_len?
Назови это всё Test_strlen или как угодно но не strlen. Чувствуешь смысл?

2. А у тебя версия только для FreeBSD, исходники есть?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение baklan » 25.10.2005 16:50:53

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

Второе: я просто из виндусовой версии взял каталог units и поместил его туда же, где и бсдэшные лежат, т.о. у меня два каталога есть
/usr/local/lib/fpc/2.0.0/units/i386-freebsd
/usr/local/lib/fpc/2.0.0/units/i386-win32


Ну и взял конфиг из поста (кажется STAKANOV) и бездумно заменил им свой, поскольку еще не понимаю толком что к чему.
baklan
новенький
 
Сообщения: 18
Зарегистрирован: 23.10.2005 21:07:00
Откуда: Москва

Сообщение Uniser » 25.10.2005 19:53:03

Можно так

Код: Выделить всё
Program strlen;
Uses strings;
Const P : pchar = 'This i s a PCHAR string.';
begin
 Writeln ( 'Наша строка = ' ,P);
 Writeln ( 'Длина строки = ' ,strings.StrLen(P));
end.


Проблема в том, что имя программы совпадает с именем ф-и и компилятор отдаёт преимущество имени программы поэтому не ожидает скобку.
Uniser
новенький
 
Сообщения: 46
Зарегистрирован: 13.05.2005 23:13:57
Откуда: Украина, Полтава

Сообщение baklan » 25.10.2005 23:28:07

Ага.... , спасибо, учусь понемногу.
baklan
новенький
 
Сообщения: 18
Зарегистрирован: 23.10.2005 21:07:00
Откуда: Москва

Сообщение STAKANOV » 26.10.2005 10:43:52

baklan писал(а):И не только с этой функцией такая же проблема.
И сразу еще одна просьба,  при попытке сделать exe  для win32 выполняю команду fpc -Twin32 file.pas
Получаю
Error: Util -as not found, switching to external linking
Куда копать?

Ты забыл as и ld скачать и поставить.
Прочитай еще раз <a href='http://freepascal.ru/forum/index.php?showtopic=250' target='_blank'>http://freepascal.ru/forum/index.php?showtopic=250</a>
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение baklan » 27.10.2005 17:37:34

Уфф , сделал, получилось!
Сейчас обдумываю один маленький проектик, чтобы не бесцельно тыкаться, а сделать полезную программку. Примерно вот что планирую: есть файл, имеющий вот такой формат
Операция;Тип;Инструмент;Время операции;Объем;Ср.цена;Цена закрытия;Прибыль;Комиссия;Остаток;
159408;OPEN;EURUSD;04.01.2005 2:00:01;700000;1.3535;0.0000;0.00;0.00;208518.28;
159409;OPEN;GBPUSD;04.01.2005 2:00:01;1100000;1.9277;0.0000;0.00;0.00;208518.28;
159525;CLOSE;GBPUSD;04.01.2005 2:02:25;-1100000;1.9277;1.9183;-10384.00;44.00;198134.28;
159669;CLOSE;EURUSD;04.01.2005 10:32:00;-700000;1.3535;1.3446;-6258.00;28.00;191876.28;
160703;OPEN;EURUSD;04.01.2005 20:59:16;700000;1.3301;0.0000;-28.00;28.00;191848.28;
......................................................
Загрузить его, взять только строки, отвечающие определенным условиям , а в этих строках взять только определенные поля и вывести в файл в формате HTML.
Начну ваять :)
baklan
новенький
 
Сообщения: 18
Зарегистрирован: 23.10.2005 21:07:00
Откуда: Москва

Сообщение Сергей Смирнов » 27.10.2005 17:42:52

Попробуй sdf, может и ваять ничего особо не придётся :)
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение baklan » 27.10.2005 18:06:58

Ну не знаю я таких слов еще (sdf)
Вообще на php это делал запросто, а сейчас не от нужды, а для обретения навыков. кстати сказать, опыт работы на php , пожалуй , больше мешает, чем помогает. Там все просто, пишешь программу, как сочинение, главное идею родить, а здесь.... error , undefined.. и т.д., пока с этим поборешься, идея уже исчезнет :)
Наверное это поначалу только. Кстати, немогу найти функцию, которая превращала бы строку в массив с заданным разделителем, ну например как php strtok или в перле split
baklan
новенький
 
Сообщения: 18
Зарегистрирован: 23.10.2005 21:07:00
Откуда: Москва

Сообщение Сергей Смирнов » 27.10.2005 18:14:08

sdf - это такой датасет. Установи одноименный пакет, брось на форму появившийся компонент, настрой в нём поля и разделитель и будет более-менее стандартный датасет для работы с файлами как раз примерно такого формата.

Если идеология работы с базами данных не вполне ясна - читай любые книги и статьи по Дельфи на эту тему. В FPC/Lazarus всё примерно также.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение baklan » 27.10.2005 20:46:10

Спасибо, но я не ставлю целью обработать этот файл, просто для практики в написании программ. SDF это немного не то.
Ну ладно, чтобы не раздувать тему, для других вопросов буду создавать другие темы.
baklan
новенький
 
Сообщения: 18
Зарегистрирован: 23.10.2005 21:07:00
Откуда: Москва

Сообщение STAKANOV » 27.10.2005 23:30:26

Мне для работы с такими тектовыми файлами (правда со сделками по акциям) хватает одной простой функции:
Код: Выделить всё
{
   ExtractWord - Извлечение слова из Строки

   Смотри Turbo professional source!
   Это пример вызова:
   FirstWord:=Extractword(1,Str,['.',' ']);

}

unit ExtrWord;
interface
type
   CharSet=set of char;
   
function ExtractWord(N : Byte; S : string; WordDelims : CharSet) : string;

implementation

function ExtractWord(N : Byte; S : string; WordDelims : CharSet) : string;
{-Given a set of word delimiters, return the N'th word in S}
var
   I, Count, Len : Byte;
   SLen : Byte absolute S;
begin
   Count := 0;
   I := 1;
   Len := 0;
   ExtractWord[0] := #0;

   while (I <= SLen) and (Count <> N) do
   begin
 {skip over delimiters}
 while (I <= SLen) and (S[I] in WordDelims) do Inc(I);
 {if we're not beyond end of S, we're at the start of a word}
 if I <= SLen then Inc(Count);
 {find the end of the current word}
 while (I <= SLen) and not(S[I] in WordDelims) do
 begin
    {if this is the N'th word, add the I'th character to Tmp}
    if Count = N then
    begin
   Inc(Len);
   ExtractWord[0] := Char(Len);
   ExtractWord[Len] := S[I];
    end;
    Inc(I);
 end;
   end;
end;

end.

не помню где стащил ;)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 45

Рейтинг@Mail.ru