PDA

Arkistonäkymässä ei tällä hetkellä lainaus erotu varsinaisesta viestistä. Suosittelemme että vilkaisette ns. täydellistä versiota: : Patronyymin siirto FinFamilyssä


jsuihko
06.04.13, 11:48
Löytyisikö SQL taitaja joka osaisi tekemään seuraavanlaisenmuutoksen Sukuohjelmisto 2004:stä tuomaani tietokantaan. Olen tallettanutpatronyymit etunimen jatkoksi muodossa: Ville (Pekanpoika). Nyt haluaisin saadasiirtää patronyymit oikeaan lokeroon.
t. Jorma

jhaapasalo
08.04.13, 18:10
Minä muokkaisin gedcom-tiedostoa ja tallentaisin sen sitten vasta FinFamily-tietokantaan.

Eli muokkaisin (esim. awk-skriptillä) rivin:

1 NAME Maija (Matintytär)/Mattila

kahdeksi riviksi:

1 NAME Maija/Mattila
2 NSFX Matintytär


awk-koodi olisi jotain:

if ($2 = "NAME" ) {
ind1 = index($0, "(")
ind2 = index ($0, ")")
alku = substr($0, 0, ind1-1)
nsfx = substr($0, ind1+1, ind2-1)
loppu = substr($0, ind2+1)

print alku, loppu
print "2 NSFX ", nsfx
} else { print $0 }

Mika Halonen
08.04.13, 22:07
Periaatteessa onnistuu noilla:

Kopioi patronyymit oikeaan kenttään:


update unitnotice set patronym = substring(givenname FROM '\\(([^"]*)\\)') where givenname <> '';



Poistaa patronyymit nimestä:


update unitnotice set givenname = regexp_replace(givenname, '\\(([^"]*)\\)', '') where givenname <> '';



Suosittelen ottamaan varmuuskopion kannasta ennen kokeilua ja en vastaa mahdollisista ongelmista.

T: Mika

jsuihko
10.04.13, 08:45
Se mikä toimi Win XP:ssä ei toimi WIN8:ssa. Esim. SQL toiminto ei toimi. Eikä ole saaravana valmiita komentoja, puhumattakaan, että tekisi uusia. Onko kellään kokemusta WIN8 kanssa Sukuohjelmisto 11:sta?

jsuihko
10.04.13, 09:11
Latasin Kallen virallisen version uudelleen ja nyt SQL:t löytyvät, mutta

updateunitnotice set patronym = substring(givenname FROM '\\(([^"]*)\\)') wheregivenname <> '';
sanoo oleva kielletty komento

-jorma

Mika Halonen
10.04.13, 15:26
Tuollaiset muutokset pitää tehdä kannan työkaluilla.

En edes kokeillut ohjelman toiminnoilla.


T. Mika

jsuihko
11.04.13, 09:47
Tein pgAdminilla ja sain toivotun ilmoituksen:
Query returned successfully: 27675 rows affected, 1491 ms execution time.
mutta ei tehnyt siirtoa patronyymi kentään. Mun piti lisätä tietokanna nimi unitnotisen eteen.

updatejuuret.unitnotice set patronym = substring(givenname FROM '\\(([^"]*)\\)') wheregivenname <> '';
miten edetä?
Jorma

jsuihko
11.04.13, 10:57
Kiitos avusta nyt olen tehnyt onnistuneesti Patronyymien siirron.

-jorma

jio
17.10.13, 16:53
Samasta aiheesta asiaa, joten ajattelin jatkaa tätä ketjua lisäpyynnöllä. SQL- ja regexp-lauseita on aikonaan tullut harrastettua, mutta sen verran kauan sitten, että ajattelin suosiolla pyytää apua käyntiin pääsemiseksi.

Minulla on Gedcom-tuonnin jälkeen huomattavasti sekavampi nimeämiskäytäntö tietokannassa, kun en tuotua sukupuuta oli itse henkilökohtaisesti rakentanut alusta loppuun. Etunimikentässä saattaa olla 1-2 etunimeä + patronyymi (tai sitten ei).

Eli osaako joku SQL-guru muokata y.o. lauseista sellaiset versiot, että patronyymin saa siirrettyä, jos a) givenname-kentässä on vähintään kaksi välimerkillä erotettua tekstinpätkää, ja b) viimeinen päättyy poika/tytär/son/dotter-päätteeseen?

Heikki Särkkä
19.10.13, 16:00
Arvostan operaatioiden osaajia. Niille, jotka eivät jaksa innostua ohjelmistojen kaikkien hienouksien käytöstä, helpoin kiertotie saman tuloksen saavuttamiseen on merkitä alun perin patronyymi ikään kuin toiseksi etunimeksi. Haittana tietysti on, että 1900-luvulla on joskus patronyymin muotoisia oikeudellisesti kakkosetunimiä. 1700-luvulla taas kahden tai useamman etunimen käyttö alkoi säätyläisistä ja muilla oli yleensä vain yksi etunimi.

Mika Halonen
20.10.13, 19:51
Periaatteessa onnistuu noilla:

Kopioi patronyymit oikeaan kenttään:
Koodi:

update unitnotice set patronym = substring(givenname FROM '[a-zA-Z_0-9åäöÅÄÖ]*(?:poika|tytär|son|dotter)\\M') where substring(givenname FROM '[a-zA-Z_0-9åäöÅÄÖ]*(?:poika|tytär|son|dotter)\\M') <> '';


Poistaa patronyymit nimestä:
Koodi:

update unitnotice set givenname = regexp_replace(givenname, '[a-zA-Z_0-9åäöÅÄÖ]*(?:poika|tytär|son|dotter)\\M', '') where givenname <> '';


Suosittelen ottamaan varmuuskopion kannasta ennen kokeilua ja en vastaa mahdollisista ongelmista.

...Ja nämä skriptit ajellaan suoraan kannan työkaluilla

T: Mika

jio
25.10.13, 18:17
Pitkällisen testailun ja hampaiden kiristelyn jälkeen pääsee lopultakin toteamaan, että yllä olevat SQL-lauseet kyllä toimivat. Ongelmia on tuottanut minulla käytössä olevan PostgreSQL-tietokannan version 9.2 (ja 9.3) mukana tuleva psql-applikaatio, joka ei näköjään toimi kunnolla. Vanhemmassa versiossa 8.4 se näkyy toimivan niin kuin pitääkin. Saa siis olla tarkkana, mikä toimii missäkin PostgreSQL-versiossa.

pgAdmin III-työkalun valikosta löytyvällä "CREATE Script"-toiminnolla pääsin kuitenkin onnistuneesti tekemään tietokantapäivityksiä myös versiossa 9.2. Lopulliset SQL-lauseet joita käytin piti vielä hieman modifioida seuraavanlaisiksi, johtuen tämän tietokantaversion vaatimuksista ja omasta kannasta löytyvien nimien takia.

Patronyymien kopiointi etunimi-kentästä:

UPDATE unitnotice SET patronym = substring(givenname FROM E'[^ ]+(?:poika|tytär|son|dotter)\\M') WHERE substring(givenname FROM E'[^ ]+(?:poika|tytär|son|dotter)\\M') <> '';

Patronyymien poisto etunimi-kentästä:

UPDATE unitnotice SET givenname = regexp_replace(givenname, E'[^ ]+(?:poika|tytär|son|dotter)\\M', '') WHERE givenname <> '';

Ja jokainenhan tietenkin kokeilee näitäkin ihan vain omalla vastuulla. Kiitokset vielä Mikalle avunannosta!