Avatar billede Towle Nybegynder
14. juli 2014 - 10:17 Der er 7 kommentarer

Søg/erstat

Jeg vil manipulere et databaseudtræk (SQL-fil).

Alle linjer starter således:

(252, 100, NULL ....

Kommaet og mellemrummet vil jeg erstatte med $ (dollartegn). Det ville være nemt, hvis ikke det var fordi andre felter indeholder tekst, hvor komma-mellemrum jo ikke skal erstattes.

I overstående eksempel kan første felt/gruppe bestå af 1, 2, 3 eller 4 ciffre, men det næste kan bestå af 1, 2 eller 3 ciffre.
Avatar billede arne_v Ekspert
15. juli 2014 - 02:16 #1
I Java vil:

String s = "(252, 100, NULL ....";
System.out.println(s);
String s2 =  s.replaceAll("^(\\(\\d{1,4})(, )(\\d{1,3})", "$1\\$$3");
System.out.println(s2);

udskrive:

(252, 100, NULL ....
(252$100, NULL ....

Er det saadan noget du leder efter?
Avatar billede Towle Nybegynder
15. juli 2014 - 07:10 #2
Øhhh, ja, men udskriver den samme linje to gange: en med dollartegn og en med? jeg er lidt forvirret.
Det drejer sig om ca. 8.500 linjer.
Avatar billede arne_v Ekspert
16. juli 2014 - 00:39 #3
Det var et eksempel paa en regex erstatning.
Avatar billede Towle Nybegynder
16. juli 2014 - 05:11 #4
Aha, men eksemplet er Java. Hvordan omsætter jeg det til noget jeg kan afvikle som regex, som jeg kan køre med Grep i Textwrangler (teksteditor til Mac)?
Avatar billede arne_v Ekspert
20. juli 2014 - 05:02 #5
maaske erstatte

^(\(\d{1,4})(, )(\d{1,3})

med

$1\$$3

men jeg kender ikke programmet
Avatar billede Towle Nybegynder
20. juli 2014 - 08:08 #6
Pyt med Grep. Det er bare det der gør det muligt at bruge regular expressions i Textwrangler. Opgaven er altså REN regex!

Jeg har desværre begået en fejl i mit oprindelige indlæg. Det var den forkerte tabel jeg tog udgangspunkt i. Det tredie felt er IKKE altid NULL, men pyt nu med det.

Jeg tror vi skal simplificere opgaven til simpelthen at være:

Erstat "(252, 100, " med "(252$100$", hvor tallene naturligvis er variable.

Parantesen er jo med til at sikre, at andre forekomster af ", " i linjerne ikke erstattes, så det er ikke noget problem.
Avatar billede Towle Nybegynder
22. juli 2014 - 06:25 #7
Svar på Stackoverflow:

Search: ^\((\d+),\s*(\d+)(?:[^,]*,){3}
Replace: ($1$$2$NULL$NULL$
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester