gfortran hello world компиляция неудача [дубликат]

Я нашел этот вопрос в поиске моего собственного решения для очень сложного соединения. Это альтернативное решение для более сложной версии проблемы, которая, как мне показалось, может быть полезна.

Мне нужно заполнить поле product_id в таблице действий, где действия нумеруются в единице, а единицы нумеруются на уровне (идентифицированном с использованием строки N), так что можно определить действия используя SKU, т.е. L1U1A1. Затем эти SKU хранятся в другой таблице.

Я определил следующее, чтобы получить список activity_id vs product_id: -

  SELECT a.activity_id, w.product_id FROM activity a JOIN units USING (unit_id) JOIN product_types  ИСПОЛЬЗОВАНИЕ (product_type_id) JOIN web_products w ON sku = CONCAT ('L', SUBSTR (product_type_code, 3), 'U', unit_index, 'A', activity_index)  

Я обнаружил, что это был слишком сложным для включения в SELECT в mysql, поэтому я создал временную таблицу и присоединился к ней с помощью инструкции update: -

  CREATE TEMPORARY TABLE activity_product_ids AS (& lt; вышеуказанный оператор select & gt;  );  Действия UPDATE: JOIN activity_product_ids b ON a.activity_id = b.activity_id SET a.product_id = b.product_id;   

Я надеюсь, что кто-то найдет это полезное

0
задан Vladimir F 2 December 2013 в 18:26
поделиться

2 ответа

Эта часть вашего оператора компиляции:

gfortran Codigo.f 

будет обрабатывать исходный файл с суффиксом .f в качестве источника фиксированной формы. Это означает, что строка продолжения указывается любым символом (отличным от пустого или 0) в столбце 6.

Однако сообщение об ошибке, которое вы получаете, предполагает, что + во второй строке вашего фрагмента не находится в столбце 6 и что компилятор рассматривает его как начальный символ в новом имени объекта, для которого он недопустим. Тот факт, что + выровнен по вертикали с помощью n в предыдущей строке, усиливает мое подозрение, что это может быть причиной вашей проблемы.

Добавление амперсанда, как предлагается в теперь удаленном ответ, на самом деле не помогает в этом случае, если вы продолжаете сообщать компилятору, что он имеет дело с исходным файлом с фиксированной формой. & используется только для продолжения в исходных файлах свободной формы. Добавление оператора строки-конкатенации // не помогает, так как за ним не следует другая строка, но заканчивается строка. //& помог, но, вероятно, не нужен.

Я думаю, у вас есть 2 возможных решения, но выберите только один:

  1. Придерживайтесь фиксированной формы и правильно выравнивайте.
  2. Измените суффикс файла на .f90, который заставит gfortran обрабатывать исходный файл как свободную форму.

Если вы переходите на вариант 2 (который Я бы рекомендовал), вы можете либо использовать & в конце строки, либо просто объединить строки. В свободной форме максимальная длина строки составляет 132 символа.

3
ответ дан High Performance Mark 16 August 2018 в 05:06
поделиться

Добавление к ответу высокой производительности Mark:

Если вы продолжаете работу с FORTRAN 77, большинство компиляторов имеют возможность увеличить допустимую длину строки, например, -ffixed-form -ffixed-line-length-none для gfortran. Как уже говорилось, Fortran> = 90 имеет длину строки 132, поэтому вам не нужно разделить строку.

Наконец, если вы хотите разделить строку в Fortran> = 90, вам нужно два амперсанды. В большинстве случаев вам нужен один, но для разделения строки вам нужно два:

namech='/home/matheus/Documents/UFABC/IC/Spectra/Elliptical/&
&espec.fits'
1
ответ дан M. S. B. 16 August 2018 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: