Синтаксическая ошибка basic неожиданный символ

Любимая мозоль

Автор Серж, 5 июня 2013, 09:55

0 Пользователи и 1 гость просматривают эту тему.

Друзья! Кто-нибудь встречался с ошибкой «Синтаксическая ошибка BASIC. Неожиданный символ: CRLF»?

Раньше мне приходилось часто ее видеть. Возникает после копирования кода из pdf или doc. Устраняется перенабором части кода и то не всегда.
Как я понимаю, связана с присутствием в коде какого-то непечатного символа.

Недавно опять встретил. Может кто сможет объяснить суть оного в более аргументированном виде.


Это одна строка разбита на две строки


+1
Это случается, когда длинные строки кода в угоду форматированию переносится со строки на строку. В редактор они так и вставляются — разными строками.
Нужно или символ подчеркивания добавить в конце первой строки, в качестве указания, что оператор еще не закончился, или просто разрыв строк удалить.
Кстати, это не единственная ошибка в этой серии. Если разрыв прошел по параметрам метода, можно нарваться и на сообщение вида «Синтаксическая ошибка BASIC. Неожиданный символ: ,.»


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


  • Форум поддержки пользователей LibreOffice, Apache OpenOffice

  • Главная категория

  • Basic

  • Любимая мозоль

Студворк — интернет-сервис помощи студентам

Добрый день.

Я новичок в теме макросов для LO. Задача: необходимо создать макрос в LO, который позволит копировать данные из страницы_1 (столбцы A-B, строк постоянно разное количество) в иные страницы_2..n по определенным условиям. Например, если в слове по столбцу A на странице_1 будет содержаться «55», то создаем лист «55» и копируем в него данную строку, таких условий множество. Но хотя бы сделать для одного условия. Как это сделать ума не приложу.

Добавлено через 3 часа 29 минут
Хотел бы добавить: сейчас вроде что-то получается, но ошибка «Синтаксическая ошибка Basic.
Неожиданный символ: CRLF.» на If. Уже все перепробовал.

Добавлено через 48 минут
Решил проблему. Осталось осуществить поиск по части содержимого в ячейки. Подскажите, пожалуйста, как сделать поиск по части слова при использовании If?

Добавлено через 37 минут
Еще одну проблему решил, как теперь осуществить запись на второй странице в первую пустую ячейку столбца?

Из моего поиска Google,
Imports System.Xmlдля технологий .NET. Является ли StarBasic технологией .NET? Нет.

Вы можете создавать проекты на C# или VB.Net, использующие UNO API LibreOffice.

Или, может быть, вы хотите знать, как работать с XML в макросе LibreOffice. В этом случае есть много разных ответов. Лично я бы создал макрос Python-UNO и начал с
import xml.etree. В качестве альтернативы UNO API предоставляет доступ к мощным XML-библиотекам, встроенным в LibreOffice.

Привет каждый раз, когда я пытаюсь запустить следующую программу:

L=-1
OPEN "tty.usbserial-FTG7QLFS:300,N,8,1,CS0,DS" FOR OUTPUT AS #1
WHILE L
    J=63
    MENU:   PRINT
        PRINT
        PRINT
        PRINT
        PRINT
        PRINT

    PRINT "WAITING FOR KEYSTROKE COMMAND"
        PRINT "TYPE:"
        PRINT "  C-CLOSE SHUTTER"
        PRINT "  O-OPEN SHUTTER"
        PRINT "  R-RESET CONTROL"
        PRINT "  Q-TERMINATE PROGRAM"
        PRINT
        PRINT

    START:
    A$ = INKEY$
    IF A$ = "O" THEN
        PRINT #1,CHR$(J+1);
        PRINT "SHUTTER OPEN COMMAND SENT"
        GOSUB TIMEOUT
        GOTO MENU
        ELSEIF A$ = "C" THEN
            PRINT #1,CHR$(J+2);
            PRINT "SHUTTER CLOSE COMMAND SENT"
            GOSUB TIMEOUT
            GOTO MENU
        ELSEIF A$ = "R" THE
            PRINT #1,CHR$(J+3);
            PRINT "CONTROL RESET COMMAND SENT"
            GOSUB TIMEOUT
            GOTO MENU
        ELSEIF A$ = "Q" THEN
            L = 0
            PRINT "PROGRAM TERMINATED"
        ELSE GOTO START
    END IF
WEND
END
TIMEOUT:    FOR I=1 TO 100:NEXT I
             CLS 0
             RETURN

Я получаю следующую ошибку «синтаксическая ошибка, отсутствует символ в строке 6», но в строке 6 есть только оператор печати, поэтому я не могу понять, что мне не хватает. Я запускаю программу через Chipmunk Basic в Mac OS X.

Благодарность

1 ответ

Похоже

OPEN "tty.usbserial-FTG7QLFS:300,N,8,1,CS0,DS" AS#1

Отсутствует режим доступа к файлу. Возможно, компилятор безуспешно ищет такие токены и сдается в следующих строках.

Документы Chipmunk BASIC говорят:

open STRINGEXPR for { input|output|append } as # FNUM
-- or --
open STRINGEXPR for random as # FNUM len = VAL

См. http://anoved.net/cbasdox/statements.html#open.

Я действительно не знаю Chipmunk BASIC, но и в других диалектах BASIC (QBasic, FreeBASIC, VisualBASIC Classic, …) вы должны указать, для каких действий вы хотите открыть свой файл.

Примеры FreeBASIC:

OPEN SomeFile FOR INPUT AS #1     ' input (read-only)
OPEN OtherFile FOR OUTPUT AS #2   ' write (replace existing file)
OPEN FooFile FOR BINARY AS #3     ' binary (read + write)

Это похоже на указание «r», «r+»,… при использовании fopen в языках C-ish.


1

MrSnrub
14 Июн 2013 в 13:04

I was trying a sample program, to check the odd and even no’s and was getting an error as below,

#!/bin/bash
N=10

for i in 1..N
if [$i/2 == 0]
then
        echo "even"
else
        echo "Odd"
fi

Error:

./case.sh: line 5: syntax error near unexpected token `if'
./case.sh: line 5: `if [$i/2 == 0]'

EDITED :

#!/bin/bash
N=10

for i in 1..N
do
if(( ($i/2) == 0 ));
then
        echo "even"
else
        echo "Odd"
fi
done

error :

./case.sh: line 6: ((: (1..N/2) == 0 : syntax error: invalid arithmetic operator (error token is "..N/2) == 0 ")
Odd

Correct working code :

#!/bin/bash
N=3

for (( i=1; i <= N; i++ ));
#for i in 1..N; // This didnt work
do
if [[ $i/2 -eq 0 ]]
#if (( i/2 == 0 ));     // This also worked
then
        echo "even"
else
        echo "Odd"
fi
done

asked Aug 3, 2014 at 13:37

Angus's user avatar

AngusAngus

12.1k29 gold badges94 silver badges151 bronze badges

[ ] or [[ ]] needs spaces between its arguments. And in your case you should use [[ ]] or (( )) as [ ] can’t handle division along with comparison:

if [[ 'i / 2' -eq 0 ]]; then
if (( (i / 2) == 0 )); then

for i in 1..N; do should also be

for (( i = 1; i <= N; ++i )); do

You probably meant to have a form of brace expansion, but you can’t apply a parameter name on it:

{1..10}  ## This will work.
{1..N}   ## This will not work.

Using eval may fix it but better go for the other form of for loop instead.

answered Aug 3, 2014 at 13:50

konsolebox's user avatar

konsoleboxkonsolebox

71.6k12 gold badges99 silver badges105 bronze badges

6

Try this :

#!/bin/bash
N=10

for i in $(seq 1 $N); do
if [ `expr $i % 2` -eq 0 ]
then
        echo "even"
else
        echo "Odd"
fi
done

1..N is not a valid syntax in bash(though I think you might be coming from ruby background), you can use seq.

answered Aug 3, 2014 at 13:51

Ashish Gaur's user avatar

Ashish GaurAshish Gaur

2,0302 gold badges17 silver badges32 bronze badges

2

  • Синтаксическая ошибка как исправить на планшете
  • Синтаксическая ошибка basic метка arg1 уже определена
  • Синтаксическая ошибка как ее устранить
  • Синтаксическая ошибка basic libreoffice
  • Синтаксическая ошибка как выразить