Avatar billede vint Nybegynder
26. januar 2008 - 19:06 Der er 6 kommentarer og
1 løsning

Konvertere en string til en word?

Hej.

Hvordan kan jeg konvertere en stirng[2] til en word type?

Jeg skal sammenligne nogle datoer med nogle værdier, der er i typen word og har derfor brug for, at Day, Month, Year herunder bliver konverteret til word.

Birthday er en variabel hentet i en Maskedit med følgende format xxxxxx-xxxx

Day := LeftStr(Birthday,2);
Month := MidStr(Birthday,2,2);
Year := MidStr(Birthday,4,2);
Avatar billede arne_v Ekspert
26. januar 2008 - 19:19 #1
StrToInt måske
Avatar billede vint Nybegynder
26. januar 2008 - 19:33 #2
Tja, jeg får i hvert fald ingen compilerfejl ved at bruge StrToInt, men jeg vælger lige at omformulere mit spørgsmål.

Jeg har nedenstående kodestump, som jeg har fundet fået brygget herinde for et år eller to siden.

function BeregnAlder(Birthday, CurrentDate: TDate): integer;
var
  Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word;
begin
  DecodeDate(Birthday, Year, Month, Day);
  DecodeDate(CurrentDate, CurrentYear, CurrentMonth, CurrentDay);

  if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then
  begin
    Result := 0;
  end
  else
  begin
    Result := CurrentYear - Year;
    if (Month > CurrentMonth) then
      Dec(Result)
    else
    begin
      if Month = CurrentMonth then
        if (Day > CurrentDay) then
          Dec(Result);
    end;
  end;
end;

Den tager udgangspunkt i at det er en dato, der indsættes som "Birthday", men inputtet her stammer fra en maskedit med formatet xxxxxx-xxxx, hvoraf jeg i dette tilfælde kun skal bruge de fire første tegn. fx 010203 svarende til d. 1. februar 2003.

Det giver mig lidt problemer. Dels at den tager de fire cifre i et CPR nummer med i beregningen, hvilket jeg ville have løst ved nedenstående ændringer og dels at den ikke læser '010203' som en dato, da den mangler -

Min forsøgte Ændring

function TformStamdata.BeregnAlder(Birthday:string;CurrentDate: TDate): integer;
var
  Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word;
begin
  Day := StrToInt(LeftStr(Birthday,2));
  Month := StrToInt(MidStr(Birthday,2,2));
  Year := StrToInt(MidStr(Birthday,4,2));
  DecodeDate(CurrentDate, CurrentYear, CurrentMonth, CurrentDay);

  if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then
  begin
    Result := 0;
  end
  else
  begin
    Result := CurrentYear - Year;
    if (Month > CurrentMonth) then
      Dec(Result)
    else
    begin
      if Month = CurrentMonth then
        if (Day > CurrentDay) then
          Dec(Result);
    end;
  end;
end;
Avatar billede kroning Nybegynder
26. januar 2008 - 19:52 #3
Dit problem er nok at Year giver 3 og det skulle være 2003 da CurrentYear er 2008
Avatar billede arne_v Ekspert
26. januar 2008 - 20:59 #4
prøv noget a la:

Year := 2000 + Year;
if Year > CurrentYear then Year := Year - 100;
Avatar billede vint Nybegynder
18. marts 2008 - 16:23 #5
Hej.

Er ved at rydde op og kan se, at jeg mangler at belønne i denne her tråd.
Avatar billede arne_v Ekspert
19. marts 2008 - 03:30 #6
Var det en opfordring til at smide et svar ?
Avatar billede vint Nybegynder
19. marts 2008 - 09:16 #7
Ja, det var måske lidt camoufleret :o)
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