Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Podmiana jednego ciągu znaków na drugi w pliku tekstowym - problem ze skryptem

538 views
Skip to first unread message

Przemysław Ryk

unread,
Mar 19, 2013, 8:16:08 PM3/19/13
to
Witam

M�cz� si� dzisiaj nad jednym problemem. Potrzebuj� mianowicie dokonywa� w
pliku XML podmiany jednego ci�gu znak�w na inny. Co wa�ne - ma si� to
wykonywa� jako cz�� pliku BAT uruchamianego jako zdarzenie Harmonogramu
zada�, wobec czego szukam narz�dzia, kt�re sobie z tym poradzi w trybie
wsadowym.

Wydawa�oby si�, �e znalaz�em - skrypt Replace.vbs ze strony
http://stackoverflow.com/questions/60034/how-can-you-find-and-replace-text-in-a-file-using-the-windows-command-line-envir
czy narz�dzie http://findandreplace.codeplex.com/ wykonuje to, co powinno. Z
jednym ma�ym wyj�tkiem, kt�rego na razie nie potrafi� obej��.

Mianowicie - tekst �r�d�owy, kt�ry potrzebuj� zmieni�, ma posta�:
D:\Przemys�aw Ryk\_Dokumenty\Rok 2012
Jedno i drugie testowane narz�dzie niestety wyk�ada si� na literze �. :(
Plik XML (jak zeznaje Notepad++) jest zakodowany w UTF-8 (bez BOM).
Pr�bowa�em skrypt uruchamia� z wiersza polece� z przestawion� stron� kodow�
na UTF (chcp 65001) - niestety na nic si� to zda�o. :(

Pytanie - jak to obej��?

--
[ Przemys�aw "Maverick" Ryk ICQ: 17634926 GG: 2808132 ]
[ Kobiety s�dz�, �e dwa razy dwa jest pi��, je�eli wystarczaj�co d�ugo ]
[ b�d� p�aka� i d�sa� si�. (George Eliot) ]

artiun

unread,
Mar 19, 2013, 9:51:35 PM3/19/13
to
W dniu 2013-03-20 01:16, Przemysław Ryk pisze:
> Mianowicie - tekst źródłowy, który potrzebuję zmienić, ma postać:
> D:\Przemysław Ryk\_Dokumenty\Rok 2012
> Jedno i drugie testowane narzędzie niestety wykłada się na literze ł. :(
> Plik XML (jak zeznaje Notepad++) jest zakodowany w UTF-8 (bez BOM).
> Próbowałem skrypt uruchamiać z wiersza poleceń z przestawioną stroną kodową
> na UTF (chcp 65001) - niestety na nic się to zdało. :(
Niestety konsola pod tym względem jest skopana. Spróbuj w batch'u wywołać
chcp na UTF-8 a zaraz potem echo "jakas tam bzdura". Sam zobaczysz, a raczej
nie zobaczysz :) Dodatkowo dochodzi zgodność znaku ł w różnych kodowaniach,
jeśli w XML jest UTF-8 to batch również musi zawierać znak ł w UTF-8, a i
strona kodowa samego środowiska (konsoli) ...
>
> Pytanie - jak to obejść?
>
To już lepiej tak, powinno wystarczyć:
https://sites.google.com/site/simplesearchreplace/

Treść Twojego post'a zapisałem w UTF-8 i potraktowałem z konsoli:
> ssr -f Text.txt -o text.txt2 -s ł -r Ł
Wyszło ok.

--
Artur
0 weeks 0 days 14 hours 21 minutes 28 seconds and 66 milliseconds.
"pl.comp.os.ms-windows.winnt"

JoteR

unread,
Mar 20, 2013, 2:48:28 AM3/20/13
to
"Przemys�aw Ryk" napisa�:

> Mianowicie - tekst �r�d�owy, kt�ry potrzebuj� zmieni�, ma posta�:
> D:\Przemys�aw Ryk\_Dokumenty\Rok 2012
> Jedno i drugie testowane narz�dzie niestety wyk�ada si� na literze �. :(

A je�li zamiast D:\Przemys�aw Ryk\... u�yjesz D:\PRZEMY~1\...?

JoteR



R.e.m.e.K

unread,
Mar 20, 2013, 3:36:22 AM3/20/13
to
Dnia Wed, 20 Mar 2013 01:16:08 +0100, Przemysław Ryk napisał(a):

> Męczę się dzisiaj nad jednym problemem. Potrzebuję mianowicie dokonywać w
> pliku XML podmiany jednego ciągu znaków na inny. Co ważne - ma się to
> wykonywać jako część pliku BAT uruchamianego jako zdarzenie Harmonogramu
> zadań, wobec czego szukam narzędzia, które sobie z tym poradzi w trybie
> wsadowym.

Polecam pakiet polecen linuxowych w wersji na Win:

http://unxutils.sourceforge.net/

Masz tam m.in. sed'a, ktory potrafi to zrobic. Warto w ogole miec pod reka
ten pakiecik, bo fajne tam sa rzeczy ;-)

--
pozdro
R.e.m.e.K

Piotr B. (pb2004)

unread,
Mar 20, 2013, 7:51:19 AM3/20/13
to
U�ytkownik "Przemys�aw Ryk" napisa� w wiadomo�ci grup
dyskusyjnych:1b98jh3quezfe$.dlg@maverick.przemekryk.no-ip.info...
>
>Witam
>
>M�cz� si� dzisiaj nad jednym problemem. Potrzebuj� mianowicie dokonywa� w
>pliku XML podmiany jednego ci�gu znak�w na inny. Co wa�ne - ma si� to
>wykonywa� jako cz�� pliku BAT uruchamianego jako zdarzenie Harmonogramu
>zada�, wobec czego szukam narz�dzia, kt�re sobie z tym poradzi w trybie
>wsadowym.
>
>Wydawa�oby si�, �e znalaz�em - skrypt Replace.vbs ze strony
>http://stackoverflow.com/questions/60034/how-can-you-find-and-replace-text-in-a-file-using-the-windows-command-line-envir
>czy narz�dzie http://findandreplace.codeplex.com/ wykonuje to, co powinno.
>Z
>jednym ma�ym wyj�tkiem, kt�rego na razie nie potrafi� obej��.
>
>Mianowicie - tekst �r�d�owy, kt�ry potrzebuj� zmieni�, ma posta�:
>D:\Przemys�aw Ryk\_Dokumenty\Rok 2012
>Jedno i drugie testowane narz�dzie niestety wyk�ada si� na literze �. :(
>Plik XML (jak zeznaje Notepad++) jest zakodowany w UTF-8 (bez BOM).
>Pr�bowa�em skrypt uruchamia� z wiersza polece� z przestawion� stron� kodow�
>na UTF (chcp 65001) - niestety na nic si� to zda�o. :(
>
>Pytanie - jak to obej��?
>

U�y� polecenia Powershella:
(Get-Content -Encoding UTF8 .\test.txt) | foreach { $_ -replace
'D:\\Przemys�aw Ryk\\_Dokumenty\\Rok 2012','c:\foo\bar' } |
Set-Content -Encoding UTF8 .\test.txt

Rezultat:
PS C:\test> Get-Content -Encoding UTF8 .\test.txt; Write-Output
"================="; (Get-Content -Encoding UTF8 .\test.txt) | foreach {
$_ -replace 'D:\\Przemys�aw Ryk\\_Dokumenty\\Rok 2012',"c:\foo\bar" }|
Set-Content -Encoding UTF8 .\test.txt; Get-Content -Encoding UTF8 .\test.txt
D:\Przemys�aw Ryk\_Dokumenty\Rok 2012
=================
c:\foo\bar

--
Piotr Borkowski

kkk

unread,
Mar 20, 2013, 8:42:35 AM3/20/13
to
Dnia Wed, 20 Mar 2013 01:16:08 +0100 w
1b98jh3quezfe$.d...@maverick.przemekryk.no-ip.info
Przemysław Ryk napisał(a):

> Mianowicie - tekst źródłowy, który potrzebuję zmienić, ma postać:
> D:\Przemysław Ryk\_Dokumenty\Rok 2012
> Jedno i drugie testowane narzędzie niestety wykłada się na literze
> ł. :( Plik XML (jak zeznaje Notepad++) jest zakodowany w UTF-8 (bez
> BOM). Próbowałem skrypt uruchamiać z wiersza poleceń z przestawioną
> stroną kodową na UTF (chcp 65001) - niestety na nic się to zdało. :(
>
> Pytanie - jak to obejść?

w ciągu do podmienienia zastosować regexp

ł = "dowolny znak"

--
k

Przemysław Ryk

unread,
Mar 22, 2013, 8:23:01 PM3/22/13
to
Dnia Wed, 20 Mar 2013 07:48:28 +0100, JoteR napisaďż˝(a):

>> Mianowicie - tekst �r�d�owy, kt�ry potrzebuj� zmieni�, ma posta�:
>> D:\Przemys�aw Ryk\_Dokumenty\Rok 2012
>> Jedno i drugie testowane narz�dzie niestety wyk�ada si� na literze �. :(
>
> A je�li zamiast D:\Przemys�aw Ryk\... u�yjesz D:\PRZEMY~1\...?

To niczego by mi to nie da�o. Bo to nie chodzi�o o wywo�anie polecenia w
pliku BAT i odwo�ania si� do danej �cie�ki, ale o zmian� konkretnego ci�gu
znak�w w pliku XML. :)

--
[ Przemys�aw "Maverick" Ryk ICQ: 17634926 GG: 2808132 ]
[ Marriage: It's a three ring circus. Engagement ring, wedding ring and ]
[ suffe... ring. (demotywatory.com) ]

Przemysław Ryk

unread,
Mar 22, 2013, 8:23:01 PM3/22/13
to
Dnia Wed, 20 Mar 2013 08:36:22 +0100, R.e.m.e.K napisaďż˝(a):

> Polecam pakiet polecen linuxowych w wersji na Win:
>
> http://unxutils.sourceforge.net/
>
> Masz tam m.in. sed'a, ktory potrafi to zrobic. Warto w ogole miec pod reka
> ten pakiecik, bo fajne tam sa rzeczy ;-)

Dzi�ki - mo�liwe, �e przyda si� w przysz�o�ci. Na razie uda�o mi si� problem
rozwi�za� innymi narz�dziami. :D

--
[ Przemys�aw "Maverick" Ryk ICQ: 17634926 GG: 2808132 ]
[ Je�li chcesz prowadzi� fascynuj�c� rozmow� z kobiet�, to w zupe�no�ci ]
[ wystarczy aby� od czasu do czasu kiwn�� g�ow�. (JoeMonster.org) ]

Przemysław Ryk

unread,
Mar 22, 2013, 8:23:01 PM3/22/13
to
Dnia Wed, 20 Mar 2013 12:51:19 +0100, Piotr B. (pb2004) napisaďż˝(a):

> U�y� polecenia Powershella:
> (Get-Content -Encoding UTF8 .\test.txt) | foreach { $_ -replace
> 'D:\\Przemys�aw Ryk\\_Dokumenty\\Rok 2012','c:\foo\bar' } |
> Set-Content -Encoding UTF8 .\test.txt
>
> Rezultat:
> PS C:\test> Get-Content -Encoding UTF8 .\test.txt; Write-Output
> "================="; (Get-Content -Encoding UTF8 .\test.txt) | foreach {
> $_ -replace 'D:\\Przemys�aw Ryk\\_Dokumenty\\Rok 2012',"c:\foo\bar" }|
> Set-Content -Encoding UTF8 .\test.txt; Get-Content -Encoding UTF8 .\test.txt
> D:\Przemys�aw Ryk\_Dokumenty\Rok 2012
> =================
> c:\foo\bar

Wielkie dzi�ki! Wysz�o na to, �e u�ycie PowerShella za�atwi�o m�j problem.
Co si� z tym naszarpa�em, to moje. :)

BAT z u�yciem polecanego przez artiuna Simple Search and Replace pod
Windows8 dzia�a� dobrze. Zapuszczony jednak pod Vist� (docelowo na tym
systemie operacyjnym rzeczone operacje sďż˝ wykonywane) wariacji dostawaďż˝. :-/
PowerShellem uda�o si� ca�o�� doprowadzi� do wymaganego rezultatu. :D

--
[ Przemys�aw "Maverick" Ryk ICQ: 17634926 GG: 2808132 ]
[ Kobieta jest najlepszym psychoanalitykiem dop�ki si� nie zakocha. ]
[ P�niej zostaje najlepszym pacjentem. (Dr. Brulov, demotywatory.pl) ]
0 new messages