Причины, почему селекторы на основе id не работают
Решения
$(document).ready();
.bind()
для jQuery. В старых версиях jQuery для этого было .live()
. Вот хороший случай для регулярных выражений. Можно выполнить находку и замену на данных или перед импортом (легче) или позже если импорт SQL принял те символы (совсем не как легкие). Но в любом случае, у Вас есть любое количество методов, чтобы сделать находку и замену, быть этим редакторы, языки сценариев, программы GUI, и т.д. Помнить, что Вы собираетесь хотеть найти и заменить весь из неверных символов.
А типичное регулярное выражение для нахождения запятой и кавычек (принимающий просто двойные кавычки): (Черный список)
/[,"]/
Или, если Вы находите, что-то могло бы измениться в будущем, этом регулярном выражении, соответствия что-либо кроме числа или десятичной точки. (Белый список)
/[^0-9\.]/
то, Что было обсуждено людьми выше, - то, что мы не знаем все данные в Вашем файле CSV. Это кажется, что Вы хотите удалить запятые и кавычки от всех чисел в файле CSV. Но потому что мы не знаем то, что еще находится в файле CSV, мы хотим удостовериться, что мы не повреждаем другие данные. Просто вслепую выполнение нахождения/заменения могло влиять на другие части файла.
Вы могли использовать эту команду жемчуга.
Perl -lne 's/[,|"]//; print' file.txt > newfile.txt
Вы, возможно, должны играть вокруг с ним немного, но это должно добиться цели.
Мое предположение здесь - то, что, потому что данные смогли импортировать это, поле является на самом деле varchar или некоторым символьным полем, потому что импорт к числовому полю, возможно, перестал работать. Здесь был тестовый сценарий, я выполнил просто MySQL, решение SQL.
таблица является просто отдельным столбцом (альфа), которая является varchar.
mysql> desc t;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| alpha | varchar(15) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
Добавляют запись
mysql> insert into t values('"1,000,000"');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t;
+-------------+
| alpha |
+-------------+
| "1,000,000" |
+-------------+
оператор Update.
mysql> update t set alpha = replace( replace(alpha, ',', ''), '"', '' );
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from t;
+---------+
| alpha |
+---------+
| 1000000 |
+---------+
Так в конце оператор, который я использовал, был:
UPDATE table
SET field_name = replace( replace(field_name, ',', ''), '"', '' );
я посмотрел MySQL Documentation , и не было похоже, что я мог сделать, регулярные выражения находят и заменяют . Хотя Вы, как Eldila, могли использовать регулярное выражение для находки и затем альтернативного решения для замены.
<час> Также быть осторожным с s/"(\d+),(\d+)"/$1$2/
, потому что, что, если число имеет больше затем просто единственную запятую, например, "1,000,000", Вы собираетесь хотеть сделать глобальную замену (в жемчуге, который является s///g
). Но даже с глобальной заменой замена запускается, где Вы в последний раз кончили (если жемчуг не отличается), и отсутствовал бы, любая запятая разделила группу. Возможное решение состояло бы в том, чтобы сделать первое (\d +) дополнительным как так s/(\d+)?,(\d+)/$1$2/g
, и в этом случае мне будет требоваться секунду, находят и заменяют для разделения кавычек.
Вот некоторые рубиновые примеры регулярных выражений, действующих на просто строку "1,000,000", уведомление там не удваивают кавычку в строке, это - просто строка самого числа.
>> "1,000,000".sub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"
>> "1,000,000".gsub( /(\d+),(\d+)/, '\1\2' )
# => "1000,000"
>> "1,000,000".gsub( /(\d+)?,(\d+)/, '\1\2' )
# => "1000000"
>> "1,000,000".gsub( /[,"]/, '' )
# => "1000000"
>> "1,000,000".gsub( /[^0-9]/, '' )
# => "1000000"
На самом деле nlucaroni, Ваш случай не совершенно правилен. Ваш пример не включает двойные кавычки, таким образом
id,age,name,...
1,23,phil,
не будет соответствовать моему regex. Это требует формата "XXX, XXX". Я не могу думать о примере того, когда он будет соответствовать неправильно.
Весь следующий пример не будет включать deliminator в regex:
"111,111",234 234,"111,111" "111,111","111,111"
сообщите мне, можно ли думать о контрпримере.
За Ваше здоровье!
Решением измененного вопроса является в основном то же.
необходимо будет выполнить запрос Select с regex где пункт.
Somthing как
Select *
FROM SOMETABLE
WHERE SOMEFIELD REGEXP '"(\d+),(\d+)"'
Foreach этих строк, Вы хотите сделать следующую regex замену s / "(\d +), (\d +), "/$1$ 2 / и затем обновите поле с новым значением.
Joseph Pecoraro серьезно и имеют резервное копирование прежде, чем сделать массовые изменения в любых файлах или базах данных. Поскольку каждый раз, когда Вы делаете regex, можно серьезно испортить данные, если существуют случаи, которые Вы пропустили.
Моя команда действительно удаляет все'', и '"'.
для преобразования жала "1,000" более строго, Вам будет нужна следующая команда.
Perl -lne 's/"(\d+),(\d+)"/$1$2/; print' file.txt > newfile.txt
Ответ Daniel и Eldila имеет одну проблему: Они удаляют все кавычки и запятые в целом файле.
то, Что я обычно делаю, когда я должен сделать что-то вроде этого, должно сначала заменить все кавычки разделения и (обычно) точки с запятой вкладками.
, Так как я знаю, в котором столбце мои затронутые значения будут, я затем делаю другой поиск и замену:
..., учитывая значение с запятой находится в третьем столбце.
необходимо начать с "^" удостоверяться, что он запускается в начале строки. Затем Вы повторяетесь ([0-9] +) \t так же часто, как существуют столбцы, которые Вы просто хотите оставить как они
([0-9] +), ([0-9] +) ищет значения, где существует число, затем запятая и затем другое число.
В строке замены мы используем \1 и \2, чтобы просто сохранить значения от отредактированной строки, разделяя их с \t (вкладка). Затем мы помещаем \3\4 (никакая вкладка между) для помещения двух компонентов числа без запятой прямо друг после друга. Все значения после того, как это будет оставлено в покое.
при необходимости в файле, чтобы иметь точку с запятой для разделения элементов, затем можно пойти и заменить вкладки точками с запятой. Однако затем - если Вы не учитываете кавычки - необходимо будет удостовериться, что текстовые значения не содержат точек с запятой самих. Вот почему я предпочитаю использовать ВКЛАДКУ в качестве разделителя столбцов.
я обычно делаю это в обычном текстовом редакторе (EditPlus), который поддерживает RegExp, но тот же regexps может использоваться на любом языке программирования.