Имя: Пароль:
1C
 
Замена значений в текстовом файле
0 Merlin2006
 
30.05.07
16:36
Привет
Никто не сталкивался с такой проблемой?!
Надо заменить текст допустим !"А" в "Б"! на следующий текст
!"Б" в "А"!
Если мы допустим будем искать по символу т.е.
А->Б 1 раз заменяем
Б->А тогда при первом проходе у нас получится 2 раз заменяем
!"Б" в "Б"!
при втором
!"А" в "А"!
А нам надо получить !"Б" в "А"! ?!
1 Ёпрст2
 
30.05.07
16:39
(0) Вопрос из серии как поменять значения  2-х переменных местами ....
Ответ - через третью ...
2 Chieftain
 
30.05.07
16:39
Не ищи, а последовательно перебирай символы и ищи в таблице замен
3 Merlin2006
 
30.05.07
16:42
Получается мы меняем
!"А" в "Б"! добавляем еще один символ и тогда
!"А" в "А1"! 1 раз
!"Б1" в "А1"! 2 раз
и на 3-им проходе мы убираем 1 символ?!
Я правильно понял?!
4 McNamara
 
30.05.07
16:44
делай перебор
нашел нужный символ-заменяй на нужный
идешь далее
один проход там будет
5 Ёпрст2
 
30.05.07
16:46
Cтр  = СтрЗаменить(Стр,"А","#");
Cтр  = СтрЗаменить(Стр,"Б","А");
Cтр  = СтрЗаменить(Стр,"#","А");
6 RK
 
30.05.07
16:47
(4) Не-а! Не один.
(3) Там ещё другой вопрос. А если тексте есть А1?
Будет А11 - Б1! А если А1 трогать нельзя?
7 McNamara
 
30.05.07
16:49
(6) значит бери символы не с длиной в один символ, а по разделителям..пробел там или другой какой..
8 Merlin2006
 
30.05.07
16:50
а как тогда заменить такую строку
в 1С
select [Спр.Наименование] from [Справочник.Материалы]
если мы это введем в текстовый файл то получится

select Спр1.DESCR from sc98
а мне допустим надо будет заменить sc98 на sc97
и в Таблицы замены у меня есть sc98->sc97
9 McNamara
 
30.05.07
16:52
читайте из строки слова и заменяйте сколько душе угодна..проблема в чем так и не пойму
10 Merlin2006
 
30.05.07
17:28
ТекстФайла=СоздатьОбъект("Текст");
   ТекстФайла.Открыть("c:\22");
     // в текстовом файле запись !мама или папа!
     //надо поменять на !папа или мама!
   Сз=СоздатьОбъект("СписокЗначений");
   Сз.ДобавитьЗначение("папа");  
   Сз.ДобавитьЗначение("мама");
   
   Для сч=1 По ТекстФайла.КоличествоСтрок() Цикл
       ПолученнаяСтрока=ТекстФайла.ПолучитьСтроку(сч)+РазделительСтрок;
   КонецЦикла;

   строка1="";  
   строка2="";
   сч1=0;
   Для сч=1 По Сз.РазмерСписка() Цикл
      строкаЗамены=Сз.ПолучитьЗначение(сч,строка1);
      строкаШаблона=Сз.ПолучитьЗначение(Сз.РазмерСписка()-сч1,строка2);
      ПолучаемаяСтрока=СтрЗаменить(ПолученнаяСтрока,строкаЗамены,строкаШаблона+"1");    
   
     сч1=сч1+1;
     Сообщить(ПолучаемаяСтрока);
   КонеЦЦикла;

// решил все таки написать и как я ожидал получил
мама или мама1

папа1 или папа
и теперь что с этим делать не совсем понятно
Вот в этом то вся и проблема
11 RK
 
30.05.07
17:31
(10)мама1 на папа менять надо сразу...
12 Merlin2006
 
30.05.07
17:32
если менять сразу то вообще плохо получается а точнее

мама или мама

папа или папа
13 RK
 
30.05.07
17:33
(12) внимательнее (11) прочитай.
14 Merlin2006
 
30.05.07
17:34
Я никак не пойму где ошибка?!
15 RK
 
30.05.07
17:36
(14)мама на мама1
папа на папа1
мама1 на папа
папа1 на мама
16 Merlin2006
 
30.05.07
17:37
Запутался окончательно (туплю жарко оч!)
17 Merlin2006
 
30.05.07
17:46
ап
18 RK
 
30.05.07
17:55
ПолучаемаяСтрока=СтрЗаменить(ПолученнаяСтрока,"мама","мама1");
  ПолучаемаяСтрока=СтрЗаменить(ПолученнаяСтрока,"папа","папа1");  
    ПолучаемаяСтрока=СтрЗаменить(ПолученнаяСтрока,"мама1","папа");
  ПолучаемаяСтрока=СтрЗаменить(ПолученнаяСтрока,"папа1","мама");
19 Ангел- Хоронитель
 
30.05.07
17:55
то ли я тупой... но никак не могу понять проблему....
20 Merlin2006
 
30.05.07
18:15
Спасибо всем получилось!
21 insider
 
30.05.07
18:51
(19)+1
(0)
ПолучаемаяСтрока=СтрЗаменить(СтрЗаменить(СтрЗаменить(ПолучаемаяСтрока,"мама","папа#"),"папа","мама"),"#","")
22 insider
 
30.05.07
18:52
+21 точнее вот так:
ПолучаемаяСтрока=СтрЗаменить(СтрЗаменить(СтрЗаменить(ПолучаемаяСтрока,"мама","папа#"),"папа ","мама"),"#","")
23 RK
 
30.05.07
18:53
(21) Сам пробовал?
24 insider
 
30.05.07
18:56
(23) неа, лениво было, а что?
25 RK
 
30.05.07
18:57
(24) Не взлетит. Будут одни мамы:)
26 insider
 
30.05.07
18:58
(25) так там же пробел добавил, чтоб было каждой твари по паре :) ("папа ")
27 RK
 
30.05.07
19:00
(26) он один фиг всех пап на мам поменяет и всё:)
без 4-х СтрЗаменить не получится.
28 insider
 
30.05.07
19:13
(27) (в точности, как у автора строка):

ПолучаемаяСтрока="!мама папа!";
   ПолучаемаяСтрока=СтрЗаменить(СтрЗаменить(СтрЗаменить(ПолучаемаяСтрока,"!мама","!папа#"),"папа!","мама!"),"#","");
   Сообщить(ПолучаемаяСтрока); //сообщает "!папа мама!"


Что я делаю не так? :)
P.S. предыдущий вариант для строки вида "папа мама ", вообщем чтоб слово пробелом оканчивалось
29 RK
 
30.05.07
19:17
(28) А если "мама и папа" или "'мама' - 'папа'"?
в (8) глянь, зачем ему это...:)
Так что 4! СтрЗаменить.
30 insider
 
30.05.07
19:20
(27) все, я понял, о чем ты, тогда так:

ПолучаемаяСтрока="!мама папа!"; //или "!папа мама!", пофиг
   ПолучаемаяСтрока=СтрЗаменить(СтрЗаменить(СтрЗаменить(ПолучаемаяСтрока,"мама","па#па"),"папа","мама"),"#","");
   Сообщить(ПолучаемаяСтрока);
31 insider
 
30.05.07
19:21
(29) все  равно 3(три) СтрЗаменить :))
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший