Что нового

Как обойти использование кавычек в тексте?

vitaliy4us

Новичок
Сообщения
158
Репутация
4
В текстовом документе имеется огромное количество как одинарных так и двойных кавычек (" ", ' ') . Из-за этого не удается сохранить данный текст в базе данных при помощи запроса SQL, поскольку в нем эти кавычки используются. Если бы использовались только двойные или только одинарные, то вопрос бы решался простой заменой в запросе SQL. А вот поскольку используются и те, и другие, то этот номер не проходит. Нужно что-то типа экранирования (\"), чего как я понимаю, AutoIt не предоставляет. Как быть в такой ситуации?
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
sngr сказал(а):
Код:
MsgBox(32,'',"as'ds'dd""asds""ad")
Есть одно но. В приведенном Вами примере количество кавычек (одинарных и/или двойных) четное. Я же столкнулся с вариантом, когда их количество является непредсказуемым. И некоторые страницы "вписываются" в запрос SQL нормально (как, например в приведенном Вами случае), а некоторые нет (возникает ошибка в запросе SQL). Предугадать заранее количество кавычек и будут ли они парными или непарными (и какие будут парными или непарными - одинарные или двойные) невозможно.
Ну что-то типа такого:
Код:
;нужно вывести строку abcd'fghi"Z
$text = "abcd'fghi"Z"
MsgBox(32,'',$text)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
vitaliy4us
Если вы читаете текст из внешнего источника, то кавычек в начале и в конце не будет:
Код:
abcd'fghi"Z
Далее вы пишете
Если бы использовались только двойные или только одинарные
Ну а что вам мешает заменить все одинарные на двойные (или наоборот) через StringReplace?
Код:
$Text = StringReplace($Text, "'", '"')
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
InnI сказал(а):
vitaliy4us
Если вы читаете текст из внешнего источника, то кавычек в начале и в конце не будет:
Код:
abcd'fghi"Z
Вот тут не понял. Есть конкретная строка (например
Код:
abcd'efgh"ZX
, которую именно так и нужно вывести. Ну пускай хотя бы при помощи
Код:
MsgBox
). Как это можно сделать?
InnI сказал(а):
vitaliy4us
Далее вы пишете
Если бы использовались только двойные или только одинарные
Ну а что вам мешает заменить все одинарные на двойные (или наоборот) через StringReplace?
Код:
$Text = StringReplace($Text, "'", '"')
Нельзя. Ничего менять нельзя. Это текст, который должен быть сохранен как есть со всеми запятыми, точками, кавычками (одинарными и двойными), т.е. один в один.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
vitaliy4us [?]
Есть конкретная строка
Где она есть? В файле? В буфере обмена? Получена по запросу из инета? Если эта строка, например, в буфере обмена, то так
Код:
MsgBox(0, "", ClipGet())
Если же вы хотите записать такую строку в скрипт, то можно, например, так
Код:
$Text = "abcd'" & 'efgh"ZX'
MsgBox(0, "", $Text)
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
InnI сказал(а):
vitaliy4us [?]
Есть конкретная строка
Где она есть? В файле? В буфере обмена? Получена по запросу из инета? Если эта строка, например, в буфере обмена, то так
Код:
MsgBox(0, "", ClipGet())
Если же вы хотите записать такую строку в скрипт, то можно, например, так
Код:
$Text = "abcd'" & 'efgh"ZX'
MsgBox(0, "", $Text)
vitaliy4us сказал(а):
В текстовом документе имеется огромное количество как одинарных так и двойных кавычек (" ", ' ')
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
vitaliy4us
Ну и зачем вы мне собственные цитаты цитируете? Вы понимаете, что "текстовый документ" - это формальное понятие. Вот эта страница тоже текстовый документ. Как вы её будете в базу запихивать? Из инета качать или в файл скидывать или через буфер обмена передавать?

Ладно. Ждите специалистов по SQL запросам. Может они поймут, чего вы хотите.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
InnI сказал(а):
vitaliy4us
Ну и зачем вы мне собственные цитаты цитируете? Вы понимаете, что "текстовый документ" - это формальное понятие. Вот эта страница тоже текстовый документ. Как вы её будете в базу запихивать? Из инета качать или в файл скидывать или через буфер обмена передавать?

Ладно. Ждите специалистов по SQL запросам. Может они поймут, чего вы хотите.
Оставим пока в стороне SQL и специалистов по нему. На самом деле все сводится к тривиальному примеру со строкой abcd"efgh'ZX. Как все же можно ее вывести при помощи MsgBox, имея в виду, что длина этой строки может быть скажем 5000 любых символов, включая одинарные или двойные кавычки? Как я понимаю, откуда она получена, это не важно. На самом деле есть некоторая переменная, в которой эта строка уже сохранена. Кстати, вариант с заменой возможно и имеет право на существование. Заменить двойные кавычки можно на что то типа zhzh. А потом залезть в базу и заменить обратно. Но все же возможно есть более простые решения?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
InnI сказал(а):
vitaliy4us [?]
Как все же можно ее вывести при помощи MsgBox
есть некоторая переменная, в которой эта строка уже сохранена
Вообще не проблема
Код:
Global $s = "", $a[2] = ['"',"'"]
For $i = 0 To 10
  $s &= $a[Random(0, 1, 1)] & " "
Next
MsgBox(0, "", $s)
А если так: есть GUI в нем некоторое поле rtf, из которого в переменную $s считывается его содержимое и сохраняется в базе данных:
Код:
$s = _GUICtrlRichEdit_StreamToVar($rtf)
$SQLString = "INSERT INTO CONTENT (PageNum, PageContent) VALUES(" & $counter & ","  & '"' & $s & '"' & ");"
;или так:
;$SQLString = "INSERT INTO CONTENT (PageNum, PageContent) VALUES(" & $counter & ","  & "'" & $s & "'" & ");"

Пусть в данный момент содержимым данного поля будет [в квадратных скобках находится содержимое поля "rtf". Уже не просто!]. Вот такая проблема. Да, и по поводу одинарных кавычек - они могут встречаться как в самом тексте, так и при его считывании в переменную $s, когда русские буквы кодируются с использованием этих самых одинарных кавычек.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
vitaliy4us

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
vitaliy4us
Неужели нет возможности в запросе передавать код символа вместо самого символа?

OffTopic:
С другой стороны, сейчас у вас проблема с кавычками. Затем, возможно, появятся проблемы с какими-нибудь другими спецсимволами или с кодировками. Если у вас недостаточно информации о тексте, тогда, может, проще хранить его "как есть" - в бинарном виде?



Добавлено:
Сообщение автоматически объединено:

Я тут прочитал, что спецсимволы в запросе, в том числе и кавычки, можно экранировать обратным слешем ;)
 
Верх