2013-01-23 7 views
9

Próbuję dołączyć tekst (np. "Fish") na końcu każdej linii w pliku przy użyciu Visual Studio lub SQL Server Management Studio przy użyciu następujących ustawień w Znajdź/Zamień okno dialogowe:

  • Znajdź to: $
  • Replace with: Ryby
  • używać wyrażeń regularnych: sprawdzone

to przede wszystkim spełnia swoje zadanie , ale w przypadku kilku linii nie tylko dołącza "Fish" do końca wiersza, ale także umieszcza go na początku linii. Nie potrafię rozpoznać żadnego wzorca tego zachowania, wydaje się, że jest prawie losowy, im większy plik, tym więcej linii ma tendencję do błędu.

Podobne wyszukiwanie/zastępowanie za pomocą^(wstawianie tekstu na początku wiersza) działa bez problemu.

Ktoś wie, dlaczego tak się dzieje? A także, czy są jakieś lepsze sugestie dotyczące osiągnięcia tego, co chcę?

+2

Dlaczego nie używać '\ n'? I zamień na 'Fish \ n' – cheesemacfly

+0

@cheesemacfly - to też rozwiązuje problem, chociaż jest bardzo nieznacznie wyłączone, ponieważ nie pasuje do ostatniej linii pliku, jeśli nie kończy się na linii nowej linii! –

Odpowiedz

10

Nie jestem pewien, dlaczego widzisz, ale możesz spróbować czegoś takiego:

Find: ^.*$ 
Replace: \0Fish 
+0

Cóż, wydaje się, że wykonuję zadanie - próbowałem go kilka razy i nie popełniłem błędu, ale nie byłem pewien, dlaczego tak się dzieje. Czy byłeś w stanie odtworzyć zachowanie, które opisałem powyżej? Wydaje mi się, że pamiętam to zdarzenie na wielu wersjach VS z powrotem do 6.0 piętnaście lat temu ... –

+2

@metal ["Zakotwicz ciąg na końcu linii" jest teraz \ r? $] (Http: // msdn. microsoft.com/en-us/library/2k3te2cs.aspx) –

+2

W VS 2015 musiałem użyć '0 $' zamiast' \ 0' dla pierwszej pasującej grupy. – jstricker

9

To działa w Visual Studio 2012 i 2015:

Find: \r 
Replace: Fish\r 

Upewnij się kleszczy '' Za pomocą wyrażeń regularnych wyboru:

Replace panel

+0

To wyglądało dobrze, ale w rzeczywistości nie do końca całkowicie idealne, ponieważ (a) nie działa na ostatniej linii pliku i (b) \ r faktycznie zostaje zamienione, więc wszystkie linie końcowe zastępują zwykłe \ r \ n po prostu \ n. Możesz dostać się dookoła (b) używając "Fish \ r" jako tekstu zastępczego, chyba ... –

+0

@ Stephen Masz rację, zaktualizowałem swoją odpowiedź. –

+0

To już nie działa w VS 2015. – cardinalPilot