"Michael Erichsen" <dsmer@attglobal.net> skrev i en meddelelse
news:405f5f91$0$295$edfadb0f@dread11.news.tele.dk...
> Nill Mortensen (7100) wrote:
>
> > "Michael Erichsen" <dsmer@attglobal.net> skrev i en meddelelse
> > news:405de71a$0$295$edfadb0f@dread11.news.tele.dk...
> >
> >>Bent Mortensen wrote:
> >>
> >>>"Bent Mortensen" <ben@mortensen.mail.dk> skrev i en meddelelse
> >>>news:400c3045$0$240$edfadb0f@dread14.news.tele.dk...
> >>>
> >>>
> >>>>Så er der en ny version af KIP Browser: 1.2.1.43.
> >>>>Denne version indeholder en rettelse ang. DDD5, hvor feltet 'Stilling
i
> >>>>husstanden' pludselig hedder 'Stilling_i_husstanden'.
> >>>>Desuden medfølger en opdateret indeksfil (kipdata.txt), så man kan
> >
> > benytte
> >
> >>>>folketællinger til og med DDD5.
> >>>>Efter installation, vil kipdata.txt på en normal dansk
Windows-opsætning
> >>>>kunne findes under: C:\Programmer\KIP Browser\Indeksfil.
> >>>>
> >>>>Første gang du starter denne version af KIP Browser, bliver du bedt om
> >
> > at
> >
> >>>>registrere den, hvilket er gratis.
> >>>>Du kan også vælge, ikke at registrere programmet, men så vil du få
vist
> >>>>registreringsskærmbilledet hver gang du starer programmet.
> >>>>
> >>>>Kan hentes her
http://www.nsoft.dk/default.asp?news=002
> >>>>
> >>>>Venlig Hilsen
> >>>>Bent Mortensen
> >>>>
> >>>>
> >>>
> >>>KIP Browser, ny version: 1.2.1.44
> >>>
> >>>Desværre indeholder version 1.2.1.43 af KIP Browser en fejl mht.
> >>>registrering.
> >>>Nogle personer får følgende fejl, når de forsøger at registrere
> >>>programmet:'order@nsoft.dk: Recipient address rejected. Relay access
> >>>denied.'.
> >>>
> >>>Dette problem er løst i version 1.2.1.44.
> >>>
> >>>Har du alligevel problemer med registreringen, vil vi meget gerne høre
> >
> > fra
> >
> >>>dig.
> >>>Send en mail til mail@nsoft.dk med en beskrivelse af problemet.
> >>>
> >>>
http://www.nsoft.dk/default.asp?news=003
> >>>
> >>>Venlig hilsen
> >>>Bent Mortensen
> >>>
> >>>
> >>
> >>Dette er et flot og nyttigt program. Jeg sad selv og legede med behovet
> >>for at lave sådan et værktøj, da jeg faldt over det. "Skjul tomme
> >>indtastninger" er specielt nyttig. Det ville være endnu bedre, hvis man
> >>også kunne sortere resultatrækkerne, f.eks. efter kildenavn.
> >>
> >>Mvh Michael Erichsen
> >
> >
> > Hej Michael,
> >
> > Det lyder som en meget god idé, og jeg har noteret det ned.
> > Der går nok noget tid, før der kommer en ny KIP Browser, men dit forslag
> > mht. sortering er bestemt kandidat til at komme med i en fremtidig
version.
> >
> > Med venlig hilsen
> > Nill Mortensen
> >
www.nsoft.dk
> >
> >
>
> Hej Nill
>
> Ikke for at være krævende, men hvad der kunne være virkelig frækt, ville
> være at programmets udskriftsfunktion også var i stand til at fortolke
> fader/moder/barn-relationer og exportere dem som GEDCOM?
> Jeg ved godt, at data ikke er ægte struktureret, men måske et
> intelligent gæt ud fra de mest almindelige formuleringer?
> Må jeg spørge af almidelig nysgerrighed, hvad du bruger du til fonetisk
> søgning? En amerikansk eller dansk algoritme? Den fanger tilsyneladende
> bedre end de amerikanske standardalgoritmer.
>
> Mvh Michael
Hej Michael,
Jeg tror, det bliver meget svært at lave noget fornuftigt funktionalitet til
at bestemme fader/moder/barn-relationer.
Det kan dog være, jeg alligevel kigger på det engang.
Algoritmen er en dansk SoundEx-algoritme.
Jeg har modificeret den lidt for at få den til at fungere fornuftigt.
Den er ikke perfekt, men jeg synes selv, den fungerer nogenlunde okay.
Der er ikke noget hemmeligt i den, så hvis du eller andre skulle være
interesserede, er der her en Pascal-version af den modificerede version:
function VokalOmsluttet(S: string; i: Integer): Boolean;
function Vokal(Ch: Char): Boolean; overload;
begin
Result := (Ch in ['A','E','I','Y','O','U','Æ',''','Ø','Å','Ö','Ü']);
end;
function Vokal(S: string; i: Integer): Boolean; overload;
begin
Result := (i < 1) or (i > Length(S)) or Vokal(S[i]);
end;
begin
Result := Vokal(S, i - 1) and Vokal(S, i + 1);
end;
function SoundexDK(Value: string; aKeepWildCard: Boolean): string;
var
i: Integer;
begin
Value := Upr(Value);
SetLength(Result, Length(Value));
for i := 1 to Length(Value) do begin
case Value[i] of
'*','?' : if aKeepWildCard then
Result[i] := Value[i]
else Result[i] := 'A';
'T','N','K','B','R','S','X','J': Result[i] := Value[i];
'D' : Result[i] := 'T';
'Z' : Result[i] := 'S';
'I','Y' : if VokalOmsluttet(Value, i) then
Result[i] := 'J'
else Result[i] := 'A';
'L','M' : Result[i] := 'N';
'C','G','Q' : Result[i] := 'K';
'P','F','V','W' : Result[i] := 'B';
'U' : if VokalOmsluttet(Value, i) then
Result[i] := 'B'
else Result[i] := 'A';
else Result[i] := 'A';
end; {case}
end;
{Fjern dubletter og tegnet 'A'}
for i := Length(Result) downto 2 do begin
if (Result[i] = Result[i - 1]) or (Result[i] = 'A') then
Delete(Result, i, 1);
end;
if (Length(Result) <> 0) and (Result[1] = 'A') then
Delete(Result, 1, 1);
end;