Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Vjatcheslav1may
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 8
1

Конвертер для библиографии

17.09.2016, 19:22. Просмотров 1072. Ответов 2
Метки utf (Все метки)

Доброго времени суток!
Имеется необходимость преобразовать библиографию, сохранённую в файл расширением Writer2Latex от Open Office. Сохранялась библиография расширением в ANSI-текст и в виде "активных символов" TeX (таким образом расширение сохраняет любые не ANSI-символы - в документации к коду программы-расширения так и написано, что формат библиографии - строго ANSI-текст), формат библиографии - BibTeX. Вот пример-фрагмент: \textcyrillic\CYRM\textcyrillic\cyra\textcyrillic\cyrk\textcyrillic\cyrs\textcyrillic\cyri...
Библиографию необходимо перенести в Zotero, который для импорта данных пользуется BibTeX-форматом, но уже с символами в формате UTF и при импорте преобразовать закодированный активными символами текст не может.
Поиск в сети выявил некоторые решения этой проблемы преобразования, но, воспользоваться ими по тем или иным причинам не получилось.
Поэтому я пошел на радикальный шаг и написал заготовку скрипта для такой конвертации:

Кликните здесь для просмотра всего текста
--zagotovka konvertera
local tex_translit = {
"{{{\\cyrishrt}}}","{{{\\cyrc}}}","{{{\\cyru}}}","{{{\\cyrk}}}","{{{\\cyre}}}",
"{{{\\cyrn}}}","{{{\\cyrg}}}","{{{\\cyrsh}}}","{{{\\cyrshch}}}","{{{\\cyrz}}}",
"{{{\\cyrh}}}","{{{\\cyrhrdsn}}}","{{{\\cyrf}}}","{{{\\cyrery}}}","{{{\\cyrv}}}",
"{{{\\cyra}}}","{{{\\cyrp}}}","{{{\\cyrr}}}","{{{\\cyro}}}","{{{\\cyrl}}}",
"{{{\\cyrd}}}","{{{\\cyrzh}}}","{{{\\cyrerev}}}","{{{\\cyrya}}}","{{{\\cyrch}}}",
"{{{\\cyrs}}}","{{{\\cyrm}}}","{{{\\cyri}}}","{{{\\cyrt}}}",
"{{{\\cyrsftsn}}}","{{{\\cyrb}}}","{{{\\cyryu}}}",

"{{{\\CYRISHRT}}}","{{{\\CYRC}}}","{{{\\CYRU}}}","{{{\\CYRK}}}","{{{\\CYRE}}}",
"{{{\\CYRN}}}","{{{\\CYRG}}}","{{{\\CYRSH}}}","{{{\\CYRSHCH}}}","{{{\\CYRZ}}}",
"{{{\\CYRH}}}","{{{\\CYRHRDSN}}}","{{{\\CYRF}}}","{{{\\CYRERY}}}","{{{\\CYRV}}}",
"{{{\\CYRA}}}","{{{\\CYRP}}}","{{{\\CYRR}}}","{{{\\CYRO}}}","{{{\\CYRL}}}",
"{{{\\CYRD}}}","{{{\\CYRZH}}}","{{{\\CYREREV}}}","{{{\\CYRYA}}}","{{{\\CYRCH}}}",
"{{{\\CYRS}}}","{{{\\CYRM}}}","{{{\\CYRI}}}","{{{\\CYRT}}}",
"{{{\\CYRSFTSN}}}","{{{\\CYRB}}}","{{{\\CYRYU}}}"
}

local rus_asbook = {
"й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф",
"ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с",
"м", "и", "т", "ь", "б", "ю",
"Й", "Ц", "У", "К", "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "Ф",
"Ы", "В", "А", "П", "Р", "О", "Л", "Д", "Ж", "Э", "Я", "Ч", "С",
"М", "И", "Т", "Ь", "Б", "Ю"}
text2 = ""
text3 = ""
text=io.open ("proba.txt", "r")
text:seek("set")
text2=text:read("*a")
text2.gsub(text2, "\\textcyrillic", "")
for i = 1, 64 do
local tag=tex_translit[i]
local letter=rus_asbook[i]
text2 = string.gsub(text2, tag, letter)
end
io.output(io.open("proba2.txt","w"))
proba2.txt = text2
Io.write ("proba2.txt")
proba2.txt:flush ()
Io.close ()


Скрипт пока не работает.
Сразу честно скажу - я новичок не только в Lua, но и в программировании.
В основном - причина того, что скрипт не работает в том, что я никак не пойму, не вижу зацепок, чтобы исправить ошибку типа "attempt to index a nil value" - прочие ошибки мне удавалось исправлять самостоятельно, используя просто логическое мышление.
"Борьба нанайских мальчиков" - где в действующих лицах оказались интерпретатор и я - изрядно утомила и поэтому я решил обратиться за помощью - и прошу помочь мне завершить скрипт.
Выдачу интерпретатора прилагаю:
Кликните здесь для просмотра всего текста
--zagotovka konvertera
> local tex_translit = {
>> "{{{\\cyrishrt}}}","{{{\\cyrc}}}","{{{\\cyru}}}","{{{\\cyrk}}}","{{{\\cyre}}}",
>> "{{{\\cyrn}}}","{{{\\cyrg}}}","{{{\\cyrsh}}}","{{{\\cyrshch}}}","{{{\\cyrz}}}",
>> "{{{\\cyrh}}}","{{{\\cyrhrdsn}}}","{{{\\cyrf}}}","{{{\\cyrery}}}","{{{\\cyrv}}}",
>> "{{{\\cyra}}}","{{{\\cyrp}}}","{{{\\cyrr}}}","{{{\\cyro}}}","{{{\\cyrl}}}",
>> "{{{\\cyrd}}}","{{{\\cyrzh}}}","{{{\\cyrerev}}}","{{{\\cyrya}}}","{{{\\cyrch}}}",
>> "{{{\\cyrs}}}","{{{\\cyrm}}}","{{{\\cyri}}}","{{{\\cyrt}}}",
>> "{{{\\cyrsftsn}}}","{{{\\cyrb}}}","{{{\\cyryu}}}",
>>
>> "{{{\\CYRISHRT}}}","{{{\\CYRC}}}","{{{\\CYRU}}}","{{{\\CYRK}}}","{{{\\CYRE}}}",
>> "{{{\\CYRN}}}","{{{\\CYRG}}}","{{{\\CYRSH}}}","{{{\\CYRSHCH}}}","{{{\\CYRZ}}}",
>> "{{{\\CYRH}}}","{{{\\CYRHRDSN}}}","{{{\\CYRF}}}","{{{\\CYRERY}}}","{{{\\CYRV}}}",
>> "{{{\\CYRA}}}","{{{\\CYRP}}}","{{{\\CYRR}}}","{{{\\CYRO}}}","{{{\\CYRL}}}",
>> "{{{\\CYRD}}}","{{{\\CYRZH}}}","{{{\\CYREREV}}}","{{{\\CYRYA}}}","{{{\\CYRCH}}}",
>> "{{{\\CYRS}}}","{{{\\CYRM}}}","{{{\\CYRI}}}","{{{\\CYRT}}}",
>> "{{{\\CYRSFTSN}}}","{{{\\CYRB}}}","{{{\\CYRYU}}}"
>> }
>
> local rus_asbook = {
>> "й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф",
>> "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с",
>> "м", "и", "т", "ь", "б", "ю",
>> "Й", "Ц", "У", "К", "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "Ф",
>> "Ы", "В", "А", "П", "Р", "О", "Л", "Д", "Ж", "Э", "Я", "Ч", "С",
>> "М", "И", "Т", "Ь", "Б", "Ю"}
> text2 = ""
> text3 = ""
> text=io.open ("proba.txt", "r")
> text:seek("set")
0
> text2=text:read("*a")
> text2.gsub(text2, "\\textcyrillic", "")
"{{{\\cyrishrt}}}","{{{\\cyrc}}}","{{{\\cyru}}}","{{{\\cyrk}}}","{{{\\cyre}}}",
"{{{\\cyrn}}}","{{{\\cyrg}}}","{{{\\cyrsh}}}","{{{\\cyrshch}}}","{{{\\cyrz}}}",
"{{{\\cyrh}}}","{{{\\cyrhrdsn}}}","{{{\\cyrf}}}","{{{\\cyrery}}}","{{{\\cyrv}}}",
"{{{\\cyra}}}","{{{\\cyrp}}}","{{{\\cyrr}}}","{{{\\cyro}}}","{{{\\cyrl}}}",
"{{{\\cyrd}}}","{{{\\cyrzh}}}","{{{\\cyrerev}}}","{{{\\cyrya}}}","{{{\\cyrch}}}",
"{{{\\cyrs}}}","{{{\\cyrm}}}","{{{\\cyri}}}","{{{\\cyrt}}}",
"{{{\\cyrsftsn}}}","{{{\\cyrb}}}","{{{\\cyryu}}}"
0
> for i = 1, 64 do
>> local tag=tex_translit[i]
>> local letter=rus_asbook[i]
>> text2 = string.gsub(text2, tag, letter)
>> end
stdin:2: attempt to index a nil value (global 'tex_translit')
stack traceback:
stdin:2: in main chunk
[C]: in ?
> io.output(io.open("proba2.txt","w"))
file (759d12a8)
> proba2.txt = text2
stdin:1: attempt to index a nil value (global 'proba2')
stack traceback:
stdin:1: in main chunk
[C]: in ?
> Io.write ("proba2.txt")
stdin:1: attempt to index a nil value (global 'Io')
stack traceback:
stdin:1: in main chunk
[C]: in ?
> proba2.txt:flush ()
stdin:1: attempt to index a nil value (global 'proba2')
stack traceback:
stdin:1: in main chunk
[C]: in ?
> Io.close ()
stdin:1: attempt to index a nil value (global 'Io')
stack traceback:
stdin:1: in main chunk
[C]: in ?
>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2016, 19:22
Ответы с готовыми решениями:

Конвертер для валют
Друзья здравствуйте! Прошу помочь написать код программы конвертер для валют....

Конвертер для rtf
Приветствую. Есть необходимость в rtf-файле добавлять записи (естественно на...

Конвертер моделей для игры
Всем здарова. Недавно у меня созрела идея сделать конвертер моделей для одной...

Конвертер для формата plt
помогите, пожалуйста, сдвинуться с места :) нужно прочитать файл *.plt ...

Конвертер видео для DLNA TV
Хотелось бы найти конвертер для конвертирования видео с последующим...

2
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
19.09.2016, 09:36 2
Лучший ответ Сообщение было отмечено Vjatcheslav1may как решение

Решение

Vjatcheslav1may, вы читайте сообщение об ошибке
там пишут, что Io==nil
нужный вам модуль называется io (с маленькой буквы)

Добавлено через 13 минут
Кроме того, забыли присвоить результат
Цитата Сообщение от Vjatcheslav1may Посмотреть сообщение
text2.gsub(text2, "\\textcyrillic", "")
Цикл лучше сделать через ipairs

Я бы сделал так
Код
local file=io.open ("proba.txt", "r")
local text=file:read("*a")
file:close()

text=string.gsub(text, "\\textcyrillic", "")
for i,tag in ipairs(tex_translit) do
	text = string.gsub(text, tag, rus_asbook[i])
end

print(text)
1
Vjatcheslav1may
0 / 0 / 0
Регистрация: 05.01.2015
Сообщений: 8
19.09.2016, 21:56  [ТС] 3
Благодарю за помощь!
Скрипт я переделал в работающую версию, которую хотел бы выложить на Гитхаб как временное решение основной проблемы - доработки конвертера Writer2Latex.
Сам код конвертера, написанный на Java я очень бегло посмотрел, но пока не нашел той отправной точки в нём, откуда стоило бы начать вносить изменения.
Кликните здесь для просмотра всего текста
--rabotayuchaya zagotovka konvertera

file=io.open ("proba.txt", "r")
text=file:read("*a")
file:close()
text=string.gsub(text, "\\textcyrillic", "")
tex_translit = {
"{{{\\cyrishrt}}}","{{{\\cyrc}}}","{{{\\cyru}}}","{{{\\cyrk}}}","{{{\\cyre}}}",
"{{{\\cyrn}}}","{{{\\cyrg}}}","{{{\\cyrsh}}}","{{{\\cyrshch}}}","{{{\\cyrz}}}",
"{{{\\cyrh}}}","{{{\\cyrhrdsn}}}","{{{\\cyrf}}}","{{{\\cyrery}}}","{{{\\cyrv}}}",
"{{{\\cyra}}}","{{{\\cyrp}}}","{{{\\cyrr}}}","{{{\\cyro}}}","{{{\\cyrl}}}",
"{{{\\cyrd}}}","{{{\\cyrzh}}}","{{{\\cyrerev}}}","{{{\\cyrya}}}","{{{\\cyrch}}}",
"{{{\\cyrs}}}","{{{\\cyrm}}}","{{{\\cyri}}}","{{{\\cyrt}}}",
"{{{\\cyrsftsn}}}","{{{\\cyrb}}}","{{{\\cyryu}}}",

"{{{\\CYRISHRT}}}","{{{\\CYRC}}}","{{{\\CYRU}}}","{{{\\CYRK}}}","{{{\\CYRE}}}",
"{{{\\CYRN}}}","{{{\\CYRG}}}","{{{\\CYRSH}}}","{{{\\CYRSHCH}}}","{{{\\CYRZ}}}",
"{{{\\CYRH}}}","{{{\\CYRHRDSN}}}","{{{\\CYRF}}}","{{{\\CYRERY}}}","{{{\\CYRV}}}",
"{{{\\CYRA}}}","{{{\\CYRP}}}","{{{\\CYRR}}}","{{{\\CYRO}}}","{{{\\CYRL}}}",
"{{{\\CYRD}}}","{{{\\CYRZH}}}","{{{\\CYREREV}}}","{{{\\CYRYA}}}","{{{\\CYRCH}}}",
"{{{\\CYRS}}}","{{{\\CYRM}}}","{{{\\CYRI}}}","{{{\\CYRT}}}",
"{{{\\CYRSFTSN}}}","{{{\\CYRB}}}","{{{\\CYRYU}}}"
}

rus_asbook = {
"й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф",
"ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с",
"м", "и", "т", "ь", "б", "ю",
"Й", "Ц", "У", "К", "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "Ф",
"Ы", "В", "А", "П", "Р", "О", "Л", "Д", "Ж", "Э", "Я", "Ч", "С",
"М", "И", "Т", "Ь", "Б", "Ю"}
for i,tag in ipairs(tex_translit) do
text = string.gsub(text, tag, rus_asbook[i])
end
textte=io.open ("proba2.txt", "w+")
textte:write (text)
textte:flush ()
textte:close ()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2016, 21:56

Конвертер для samsung s 5250 (wavec525)
подскажите пожалуйста , каким конвертером лучше конвертировать видеофайлы ,...

Html - фильтр-конвертер для браузера
Проблема: 1) Поток рекламы 2) Неудобное форматирование для просмотра (спасая...

Конвертер для видеофайла формата WBMP
Всем привет! Есть несколько ценных файлов формата WBMP. Эти файлы ни NERO не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru