Avatar billede 50573433 Nybegynder
20. oktober 2011 - 14:26 Der er 7 kommentarer og
1 løsning

æøå på Lazarus

Jeg beklager at jeg bruger Delphi, når spørgsmålet er Lazarus relateret.
Jeg har udviklet programmet i mange år på mit på gl. Delphi. Som alle ved, kan en 32bit Delphi med database ikke køre 64bit, derfor er Lazarus valgt som alternativ.

... og så til spørgsmålet:
Hvad skal jeg gøre ved en Lazarus ver. 0.9.30.2RC1 for at programmet kan køre korrekt med æøåÆØÅ ?

Jeg har læst nogle artikler på nettet, men fattede ikke en 'meter'.
Peter
Avatar billede hugopedersen Nybegynder
20. oktober 2011 - 14:34 #1
"Som alle ved, kan en 32bit Delphi med database ikke køre 64bit"

Det vidste jeg ikke :-)

Jeg kører da en 32 bit Delphi XE på Windows 7 64 bit med både MS Access, SQLite og MySQL databaser.
Men det er selvfølgelig noget andet du mener.

Hvad er det lidt mere specifikt at din Lazarus gør eller nærmere ikke gør?
Avatar billede 50573433 Nybegynder
20. oktober 2011 - 16:51 #2
Min Delphi er en ver. 4, som var med i et blad for flere år siden. DB-systemet er "Borland Database Engine (BDE)".
Databasesystemet kører fint på en ren 32 maskine, men kan ikke køre på en maskine, hvor der også er 64 bit.

"Hvad er det lidt mere specifikt at din Lazarus gør eller nærmere ikke gør ?":
Hvis jeg skal sammenligne 2 ord, hvor der både er aøå og ÆØÅ, er det jo nødvendigt enten at omformatere med LowerCase eller UpperCase for at kunne sammenligne.

F.EKS et testet forsøg:
procedure TForm1.PrepareSearch(var S : String);
var I : Integer;
    A : String;
begin
//  Forsøg 1. - S := 'ÆæØøst'
  A := '';
    for I := 1 to length(S) do begin
    A := A + LowerCase(S[I]);
  end;
  // Resultet S = 'ÆæØøST' (kun "ST" er nu store bogstaver

//=========================================================

//  Det andet forsøg - (NB!S er aflæst til 'ÆæØøst')
// Forsøg 2. - S := 'ÆæØøst'
    A := '';
    Repeat
    // Efter 1. repeat burde S blive 'æØøst'
    if Copy(S, 1, 1) = 'æ' then begin
      A := A +'Æ'; Delete(S, 1, 1);
      Continue;
    end;
    if Copy(S, 1, 1) = 'ø' then begin
      A := A +'Ø'; Delete(S, 1, 1);
        Continue;
    end;
    if Copy(S, 1, 1) = 'å' then begin
      A := A +'Å'; Delete(S, 1, 1);
      Continue;
    end;
    A := A + Copy(S, 1, 1); // Første gang, at denne passeres bliver A = '?' i stedet for "Æ"
    Delete(S, 1, 1); // og her skal S = 'æØøst', men bliver S bliver "?æØøst".
  until S = '';
  S := A;
end;

GODE IDÉER EFTERLYSES
Avatar billede arne_v Ekspert
20. oktober 2011 - 17:03 #3
Har du proevet at erstatte String med WideString eller UnicodeString og se om en af dem virker?
Avatar billede 50573433 Nybegynder
21. oktober 2011 - 00:25 #4
Hej Arne
Jeg har nu prøvet dine forslag, men det virkede ikke (ÆV).
Avatar billede hugopedersen Nybegynder
21. oktober 2011 - 08:14 #5
OK - BDE fungerer nu ganske fint på Windows 7 64 bit hvis man lige finder den rigtige installationsfil til det. Jeg har haft det til at køre tidligere da jeg havde brug for det.

Virker  AnsiCompareText  ikke til at sammenligne dine tekster?
Den er mig bekendt CI
Avatar billede 50573433 Nybegynder
21. oktober 2011 - 15:02 #6
Jeg har selv løst opgaven ved v.h.a. pointere.
Lukker
Avatar billede 50573433 Nybegynder
21. oktober 2011 - 23:59 #7
Hej Hugo og Arne
Alle jeres forslag virker i min PC, hvis sætningerne IKKE indeholder ÆØÅ og disse enten skal konverteres til store el. små bogstaver.
Det er pokkerme irriterende for det samme virker fint i mit gl. Delphi.
Peter
Avatar billede 50573433 Nybegynder
23. oktober 2011 - 18:18 #8
Her er løsningen:
-----------------
AnsiCompareText(UTF8ToAnsi('æøåXÆ'), UTF8ToAnsi('æøÅxæ'))

Med nedenstående bliver Label1.Caption = 0 i Lazarus som sammenligning, hvilket ikke har været muligt i Lazarus, men i Delphi, hvis der manglede "UTF8ToAnsi".

Resultatet bliver 0, hvad enten det er rent store bogstaver eller en blanding.

Jeg skal også lige rette en tak til: Benny Christensen, Løsning
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