Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена в подстроке.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Stasnislav
Отправлено: 04 Июня, 2012 - 22:47:37
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Апр. 2011  


Помог: 4 раз(а)




Привет. При сохранении excel в csv, если в тексте есть точка с запятой, то весь текст ячейки помещается в двойные кавычки. Соответственно мне необходимо убрать (заменить) все точки с запятой, которые являются частью текста, а не разделителями. Т.е. нужно в строке найти подстроку, обрамленную двойными кавычками, и в этой подстроке заменить все точки с запятой на, например, запятые. У меня возникла загвоздка в написании регулярки, т.к. в такой подстроке может быть несколько точек с запятой. Я написал один рабочий вариант, но знаю, что можно и нужно по-другому делать. Подскажите... Вот мой вариант:

PHP:
скопировать код в буфер обмена
  1.  
  2. while (preg_match("/\"(.+);(.+)\"/", $content)) {
  3.         $content = preg_replace("/\"(.+);(.+)\"/", "\"$1, $2\"", $content);
  4. }
  5.  

(Отредактировано автором: 04 Июня, 2012 - 22:58:44)



-----
Программисты на работе общаются двумя фразами: «непонятно» и «вроде работает».
 
 Top
Medallion
Отправлено: 04 Июня, 2012 - 23:05:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




А чем стандартная строковая функция не угодила?!
Вот пример реализации:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'Да будет свет!; А, может нет!;';
  3. $simvol = ';';
  4. $zamena = ',';
  5.  
  6. $itog = str_replace($simvol,$zamena,$str);
  7.  
  8. echo $itog;
  9.  
 
 Top
Stasnislav
Отправлено: 04 Июня, 2012 - 23:09:37
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Апр. 2011  


Помог: 4 раз(а)




Medallion пишет:
А чем стандартная строковая функция не угодила?!

Спасибо за ответ. Но я выше описал, что операция происходит над подстрокой строки из csv. str_replace заменит все "точки с запятой", в том числе и используемые в качестве разделителя. Тут только регулярка поможет.


-----
Программисты на работе общаются двумя фразами: «непонятно» и «вроде работает».
 
 Top
Medallion
Отправлено: 04 Июня, 2012 - 23:15:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


Помог: 7 раз(а)




Ну ладно, кто знал! Не понял
 
 Top
DlTA
Отправлено: 05 Июня, 2012 - 02:32:20
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Stasnislav а http://www.php.su/functions/?fgetcsv не справляется?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB