Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> string и символ @, как string "привести" к "@string" 
:(
    Опции темы
andrx
Дата 5.7.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



Добрый день!

Споткнулся на ровном месте smile  :

Есть переменная :
string s = "text";

Как сделать так, чтобы значение переменной s стало представляться как @"text". 
Вариант  string s = @"text"; - не подходит. 
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
Tror
Дата 5.7.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: 2
Всего: 4



Код

string s = "@\"text\"";
 
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.7.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(andrx @  5.7.2006,  10:49 Найти цитируемый пост)
 @"text"

А что это такое? Значение строки?

Добавлено @ 11:16 
Тогда могу предложить две страшные  smile конструкции на выбор
Код

string s = "@\"Text\"";
string s = @"@""Text"""


Добавлено @ 11:17 
Tror, апаздал  smile  
PM MAIL WWW ICQ   Вверх
andrx
Дата 5.7.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



2 ivashkanet 

@"text" - это строка в которой каждый символ будет трактоваться как символ, т.е. строка без управляющих знаков. Привожу пример :

MessageBox.Show(@"1\n2"); - выведет одну строку 
MessageBox.Show("1\n2"); - выведет ДВЕ строки 
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.7.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(andrx @  5.7.2006,  11:25 Найти цитируемый пост)
@"text" 

Нет про это я в курсе. Только вот вопрос: "Что ты этим имелл ввиду" smile 
Ведб значение переменной хранится в одном формате (набор символов, закодированных юникодом,вроде). Вне зависимости как ты ее написал с @ или без  smile  
PM MAIL WWW ICQ   Вверх
andrx
Дата 5.7.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



К сожалению все Ваши варианты это практически тоже самое, что и string s = @"text"; 

видимо я плохо объяснил проблему.

Вот код
Код

string file_httpd_conf=null;
            try
            {
                file = new StreamReader(main.__apachePath + @"conf/httpd.conf");
                file_httpd_conf = file.ReadToEnd();
                file.Close();
            }
            catch { main._MessageCriticalError(); return; }
            if ( Regex.IsMatch(file_httpd_conf
                ,@"\b\s*[^#]\s*AddCharset WINDOWS-1251\s+\.cp-1251\s+\.win-1251")
                )
            { MessageBox.Show("!!!"); }


Код проверяет есть ли в конфигурационном файле apache незаремленная строка
AddCharset WINDOWS-1251 .cp-1251 .win-1251

Так вот если 
file_httpd_conf представляется как обычная строка то регулярное выражение ничего не найдет

если же 
file_httpd_conf представляется как @строка то все ОК

Добавлено @ 11:41 
Для примера :

string представленный как string
Код

if ( Regex.IsMatch(
                "\r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251"
                ,@"\b\s*[^#]\s*AddCharset WINDOWS-1251\s+\.cp-1251\s+\.win-1251")
                )
            { MessageBox.Show("!!!"); }

Сообщение не появляется

string представленный как @string
Код

if ( Regex.IsMatch(
                @"\r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251"
                ,@"\b\s*[^#]\s*AddCharset WINDOWS-1251\s+\.cp-1251\s+\.win-1251")
                )
            { MessageBox.Show("!!!"); }

Выводится сообщение  

Это сообщение отредактировал(а) andrx - 5.7.2006, 11:47
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.7.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



andrx, я повторяю:
Цитата(ivashkanet @  5.7.2006,  11:28 Найти цитируемый пост)
значение переменной хранится в одном формате (набор символов, закодированных юникодом,вроде). Вне зависимости как ты ее написал с @ или без

Цитата(andrx @  5.7.2006,  11:33 Найти цитируемый пост)
"\r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251"
 
Цитата(andrx @  5.7.2006,  11:33 Найти цитируемый пост)
@"\r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251"
 -- разные строки smile 
Первая = <возврат каретки><новая строка>nAddCharset WINDOWS-1251 .cp-1251 .win-1251
Вторая = \r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251
Где \r и \n -- просто четыре символа. Две \ и две буквы  smile 
P.S. Регулярные выражения подзабыл, так что даже не пытался понять что ты ловишь

Добавлено @ 12:14 
andrx, какими символами "ремится" строка в Apach?
Наверное у тебя проблема здесь
Цитата(andrx @  5.7.2006,  11:33 Найти цитируемый пост)
\b\s*[^#]\s*


 
PM MAIL WWW ICQ   Вверх
andrx
Дата 5.7.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



ivashkanet
Цитата(ivashkanet @  5.7.2006,  12:11 Найти цитируемый пост)
andrx, какими символами "ремится" строка в Apach?
Наверное у тебя проблема здесь

Цитата(andrx @  5.7.2006,  11:33 )
\b\s*[^#]\s*

сдесь проблемы нет smile


по поводу :
Цитата

значение переменной хранится в одном формате (набор символов, закодированных юникодом,вроде). Вне зависимости как ты ее написал с @ или без

беспорно smile
я как раз и спрашивал
Как сделать так, чтобы значение переменной s стало представляться как @"text". 
т.е. как из
 
Цитата

Первой 
  строки
сделать
Цитата

Вторую
 

Это сообщение отредактировал(а) andrx - 5.7.2006, 13:03
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
ivashkanet
Дата 5.7.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(andrx @  5.7.2006,  12:49 Найти цитируемый пост)
стало представляться как @"text"

Вот такой значит вопрос. Хммм smile 
Думаю только в ручную  smile Ведь @ и не @ преобразования в строку делаются компилятором  smile Хотя можно капнуть в сторону .ToString(Format).
А самый лучший способ правильно настроить регулярное выражение. А не изобретать велосипед smile 
Вот все мои мысли, удачи smile 
 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 5.7.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Тебе нужно экранировать символы в существующей строке (которую ты читаешь из файла и складываешь в переменную file_httpd_conf). Тогда и получится тот же эффект, что при использовании символа @ в объявлении строкового литерала. По-человечески это называется "escape special characters" или что-то вроде того, можешь поискать на codeproject-е. 


--------------------
user posted image
PM MAIL WWW   Вверх
Void
Дата 5.7.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



System.Text.RegularExpression.Regex.Escape, как ни странно. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
andrx
Дата 5.7.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 16.12.2005
Где: Киев

Репутация: 1
Всего: 4



Void
спасибо, вроде бы то, что надо, но пока все не так гладко, как хотелось бы.
разбираюсь. 
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
Wanderer2019
Дата 6.7.2006, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



а вариант со String.Format????

Ну если я правильно понял то что то в таком духе:
Код

String.Format("@\"{0}\"",test);

не проверял но вернет строчку вроде 
@"test" 

мда... не вернул... суть проблемы ясна.. тогда наверное только регулярные выражения 

попробуй вот так.. мож получится... 
Код

string a=((char)64).ToString()+"\"Test\"";
Console.WriteLine(a);
 

Это сообщение отредактировал(а) Wanderer2019 - 6.7.2006, 11:44
PM ICQ MSN   Вверх
Дрон
Дата 6.7.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



andrx, 
Извращенец, вы батенька. Какой смысл подгонять исходные данные под кривой обработчик?  Тем более если там всё принципиально неверно smile 

Однозначно, у тебя проблема в "\b\s*[^#]\s*". 
Это выражение соответствует последовательности: граница слова, потом возможны пробелы, потом любой символ, кроме # и опять возможны пробелы.

И это естественно, что оно вернёт False для строки \r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251
Потому как после \r\n - это граница слова, проелов нет, НО дальше-то нам требуется КАКОЙ-ТО СИМВОЛ -- и как этот символ берётся буква A (первая буква в AddCharset). Оставшаяся часть строки уже ничему не соответствует. Всё -- False.

Строка @"\r\nAddCharset WINDOWS-1251 .cp-1251 .win-1251" соответствует выражению, ибо:
\r - пропускаем,
вторая \ - граница слова,
нет пробелов,
n - необходимый символ (который не #),
опять нет пробелов,
дальше идёт нужная строка с AddCharset. 

Это сообщение отредактировал(а) Дрон - 6.7.2006, 17:16


--------------------
Да. Именно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.