Войти

Показать полную графическую версию : [решено] разбор файла и запросы в базу mysql


judipav
26-04-2013, 22:31
Доброго времени суток уважаемые форумчане!
захотелось мне тут немного поиграться.
есть файл с данными - хочу его разобрать bat-ником и загнать в mysql в процессе каждую строку файла с данными на выходе пронумеровать счетчиком.
скрипт нехитрый но то ли лыжи не едут то ли что-то идет "не так".

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

REM создаем таблицу в базе
C:\AppServ\MySQL\bin\mysql.exe -u root --password=123456 -e "USE `hardware`; CREATE TABLE `1` (`id` int not null, `desc` varchar(255), `count` int); "
set /a CNT=1 REM счетчик строк

for /f "tokens=1,2 delims=;" %%k in (1.txt) do (
C:\AppServ\MySQL\bin\mysql.exe -u root --password=123456 -e "USE `hardware`; INSERT INTO `1` VALUES (%CNT%, '%%k', %%l); "

set /a CNT+=1 REM по-идее должен инкрементировать но...
)интересуют две вещи:
во-первых текстовый файл и поле desc в кодировке cp1251, в поле desc вместо русских букв я получаю знаки вопроса.
безуспешно игрался с кодировками файла и поля desc, использовал utf8_general_ci при этом изменял запрос на
INSERT INTO `1` VALUES ('%CNT%', CONVERT('%%k' USING utf8), %%l); в результате поле вообще остается пустым

во-вторых счетчик CNT всегда равен "1"

Iska
27-04-2013, 08:45
во-вторых счетчик CNT всегда равен "1" »
«enabledelayedexpansion» (это у Вас есть) + «!CNT!» внутри скобок:
@echo off
setlocal enabledelayedexpansion


for /f "tokens=1,2 delims=;" %%k in (1.txt) do (
C:\AppServ\MySQL\bin\mysql.exe -u root --password=123456 -e "USE `hardware`; INSERT INTO `1` VALUES (!CNT!, '%%k', %%l);

judipav
27-04-2013, 12:41
Прошу прощения, мне очень стыдно за свою необразованность.
Где можно прочитать об использовании восклицательных знаков обрамляющих переменную, в моем справочнике я ни слова о них не нашел.

Iska
27-04-2013, 14:39
Где можно прочитать об использовании восклицательных знаков обрамляющих переменную »
setlocal /?
в части «enabledelayedexpansion»/«disabledelayedexpansion». Также, под Windows XP:
hh.exe "mk:@MSITStore:C:\WINDOWS\Help\ntcmds.chm::/setlocal.htm"
Под Windows 7:
hh.exe "ms-its:C:\WINDOWS\Help\CommandReference.chm::/html/e4e4b6d3-3f1a-4851-a782-25ee2470e16e.htm"
предварительно загрузив: Download Windows Command Reference from Official Microsoft Download Center (http://www.microsoft.com/en-us/download/details.aspx?id=2632), поместив его в «%SystemRoot%/Help» и, возможно, разблокировав:
http://imageshack.us/a/img838/7499/image00120130326150554.png
его после загрузки.

Также обязателен к прочтению Урок bat-аники (http://www.rsdn.ru/article/winshell/batanyca.xml).

judipav
28-04-2013, 12:12
значение директивы SETLOCAL ENABLEDELAYEDEXPANSION мне был понятен, а вот касательно "!...!" ключевые слова нашел в "Уроке bat-аники":

Подстановка переменной происходит до того, как она будет изменена в процессе выполнения блока.
Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования.

Это то что нужно, спасибо! Проблема решена.




© OSzone.net 2001-2012