Оглавление
C – добавление символа в строку –
Ошибка преобразования данных xdto: текст xml содержит недопустимый символ
После полученного интереса к публикации https://tvoyvk.ru/public/601635/ о одном из способов формирования изображений в 1С я решил продолжить изучать другие возможности “рисования” в 1С. Естественно, самым простым форматом после svg будет старый добрый растр в bmp. Но когда приступил к написанию – понял, что формировать картинку с “0”, наверное, будет нечестно по отношению к читателю, и для начала нужно разобрать, что такое bmp как формат, как его читать и, главное, показать примеры работы с новыми механизмами платформы.
1 стартмани
12.04.2022
11142
kot-stas
11
Ошибка: недопустимый символ в имени в (1)
Я пытаюсь скомпилировать файл fortran вместе с некоторыми файлами .h в FORTRAN. Файлы .h содержат определение для общих блоков переменной. Когда я компилирую их в Fortran, я получаю следующую ошибку:
integer knue,ke,knumu,kmu,knutau,ktau,ku,kd,kc,ks,kt,kb,kgamma,
1
Error: Invalid character in name at (1)
Код, где возникает эта ошибка,
Теперь мой вопрос: имеет ли это “1”, где ошибка?
Строки кода, на которые указывают эти ошибки,
integer knue,ke,knumu,kmu,knutau,ktau,ku,kd,kc,ks,kt,kb,kgamma,
& kw,kz,kgluon,kh1,kh2,kh3,khc,ksnue,kse1,kse2,ksnumu,ksmu1,
& ksmu2,ksnutau,kstau1,kstau2,ksu1,ksu2,ksd1,ksd2,ksc1,ksc2,
& kss1,kss2,kst1,kst2,ksb1,ksb2,kn1,kn2,kn3,kn4,kcha1,kcha2,
& kgluin,kgold0,kgoldc
Кроме того, есть ли что-то неправильное в том, как используется продолжение. Я использую gfortran для компиляции этого файла.
Похоже, вы используете продолжения строки стиля Fortran 77 и пытаетесь скомпилировать код форматированного текста в формате Fortran 90. Вам нужно либо скомпилировать с помощью параметра gfortran -ffixed-form
, либо форматировать код, используя продолжения строки стиля Fortran 90:
integer knue,ke,knumu,kmu,knutau,ktau,ku,kd,kc,ks,kt,kb,kgamma, &
kw,kz,kgluon,kh1,kh2,kh3,khc,ksnue,kse1,kse2,ksnumu,ksmu1, &
ksmu2,ksnutau,kstau1,kstau2,ksu1,ksu2,ksd1,ksd2,ksc1,ksc2, &
kss1,kss2,kst1,kst2,ksb1,ksb2,kn1,kn2,kn3,kn4,kcha1,kcha2, &
kgluin,kgold0,kgoldc
У меня возникла эта проблема при изменении scipy
и попытке ее скомпилировать. Для его работы понадобилась следующая идентификация: звезда *
в столбце 5. Она работает для стилей Fortran 77 и 90.
double precision a,abseps,abserr,alist,area,area1,area12,area2,
* a1,a2,b,blist,b1,b2,correc,dabs,defabs,defab1,defab2,d1mach,
* dmax1,dres,elist,epmach,epsabs,epsrel,erlarg,erlast,errbnd,
* errmax,error1,error2,erro12,errsum,ertest,f,oflow,resabs,
* reseps,result,res3la,rlist,rlist2,small,uflow,areav
К вашему первому вопросу, да, “1” обычно обозначает точку в коде, где происходит ошибка. Код как таковой выглядит в порядке.
Подход № 1
String toSpaceSeparatedString(String s) {
var start = 0;
final strings = <String>[];
while (start < s.length) {
final end = start 4;
strings.add(s.substring(start, end));
start = end;
}
return s.join(' ');
}
Подход № 2 (менее эффективный)
String toSpaceSeparatedString(String s) {
const n = 4;
assert(s.length % n == 0);
var i = s.length - n;
while (i > 0) {
s = s.replaceRange(i, i, ' ');
i -= n;
}
return s;
}
Подход №2 менее эффективен (он должен многократно вставляться в String и, следовательно, требует многократного копирования одних и тех же частей String) и более неудобен (он повторяется от конца String до начала, чтобы индексы были стабильными), и имеет больше угловых случаев (для простоты я предполагаю, что входная строка делится равномерно на длину подстроки).
Тем не менее, я String.replaceRange его сюда, потому что он демонстрирует использование String.replaceRange, который обычно может быть полезен для вставки одной String в другую, и который, вероятно, будет проще для одноразовых случаев.