[Delphi]->[ASP] Stukje code omzetten

Pagina: 1
Acties:

  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Ik ben een stuk Delphi code aan het omzetten naar ASP. Nou ken ik de taal Delphi helemaal niet en ik heb met één stukje code enigszins moeite:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  function TranslateChunk(Chunk: string): string;
  var
    i: Integer;
    s: string;
  begin
    i := 0;
    while length(Chunk) >= 3 do
    begin
      s := copy(Chunk, Length(Chunk)-2, 3);
      Result := TranslatePart(s,i) + Result;
      Delete(Chunk, Length(Chunk)-2, 3);
      Inc(i);
    end;
    Result := Trim(Result);
  end;


Ik heb er nu van gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
  Function TranslateChunk(Chunk)

    i = 0
    While Len(Chunk) >= 3
      s = copy(Chunk, Length(Chunk)-2, 3)
      Result = TranslatePart(s,i) & Result
      Delete(Chunk, Length(Chunk)-2, 3)
      Inc(i)
    Loop
    Result = Trim(Result)
  End Function


De functies copy, delete en inc ken ik echter niet dus de translatie is nog niet compleet. Weet iemand hoe dit zou moeten? Ik heb het idee dat copy hetzelfde doet als de functie Mid() in ASP.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 21:48

Reptile209

- gers -

copy() neemt het deel van <eerste arg> dat begint op positie <tweede arg> (1-based) en kopieert <derde arg> tekens als resultaat (of tot het einde van de string, net wat er kleiner is).

delete() verwijdert een stuk uit een string
inc() verhoogt een integer met 1

Zo scherp als een voetbal!


  • freddifish
  • Registratie: November 2000
  • Laatst online: 29-01 09:15

freddifish

schnappi !

in delphi: copy (S,x,y) = kopieer uit string S vanaf positie x alle tekens tot je een string hebt met lengte y
inc(i) == i:=i+1

ik ken MID() weer niet maar lijkt me wel overeen te komen..

[hmm alweer te laat :p ]

[ Voor 7% gewijzigd door freddifish op 10-12-2004 13:25 ]

'people say I'm a drinker, but I'm sober half the time' - Mick Jagger | mail: freddifish_AT_gmx.net


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Bedankt hier kom ik ongetwijfeld verder mee!

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Hmmm het gaat nog niet helemaal geweldig. Hieronder alles dat omgezet moet worden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Een Delphi functie om een bedrag uit te schrijven in tekst. 't Is niet zo flexibel en niet zo compact, maar het werkt in ieder geval wel. Leuk voor de knutselaar :-)

function Zegge(const Val: string): string; overload;

  function TranslatePart( Part: string; Power: Integer ): string;
  const
    Pwr: array[0..9] of string = (
      '', 'duizend', 'miljoen', 'miljard', 'biljoen', 'biljard',
      'triljoen', 'triljard', 'ziljoen', 'ziljard' );
    Pre: array[1..9] of string = (
      'één', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen');
    Tieners: array[0..9] of string = ('tien', 'elf', 'twaalf', 'dertien',
      'veertien', 'vijftien', 'zestien', 'zeventien', 'achttien', 'negentien' );
    Decai: array[2..9] of string = ( 'twintig', 'dertig', 'veertig', 'vijftig',
      'zestig', 'zeventig', 'tachtig', 'negentig' );
  var
    i, Uni, Deca, Cent: Integer;
  begin
    Result := '';
    Uni := StrToInt(Part[3]);
    Deca := StrToInt(Part[2]);
    Cent := StrToInt(Part[1]);
    if Cent > 0 then
    begin
      if Cent > 1 then
        Result := Pre[Cent]; //zoveelhonderd
      Result := Result + 'honderd';
    end;
    if (Cent = 1) and (Deca = 0) and (uni>0) then   //honderd _en_ vijf
      Result := Result + '-en-';
    if Deca = 1 then                    // dertien
      Result := Result + Tieners[Uni]
    else
    begin
      {if Uni = 1 then
        Result := Result + 'een'       // Pre[] biedt deze waarde niet.}
      if Uni > 0 then
        Result := Result + Pre[Uni];
      if (Uni > 0) and (Deca > 0) then
        Result := Result + 'en';
      if Deca > 0 then
        Result := Result + Decai[Deca];
    end;
    if Result > '' then
    begin
      if (Cent+Deca=0) and (Uni=1) and (Power=1) then  // eenduizend --> duizend
        Result := '';
      Result := Result + Pwr[Power] + ' ';
    end;
  end;

  function TranslateChunk(Chunk: string): string;
  var
    i: Integer;
    s: string;
  begin
    i := 0;
    while length(Chunk) >= 3 do
    begin
      s := copy(Chunk, Length(Chunk)-2, 3);
      Result := TranslatePart(s,i) + Result;
      Delete(Chunk, Length(Chunk)-2, 3);
      i = i + 1
    end;
    Result := Trim(Result);
  end;

const
  nul: string = 'nul';
var
  d, v: string;
  i: Integer;
begin
  if length(val) > 30 then
    raise Exception.Create( 'Invoer te lang' );
  v := '000' + val;

  Result := '';
  i := Pos(',', v);
  if i > 0 then
  begin
    d := Copy(v, i+1, length(v));
    if length(d) > 2 then
      raise Exception.Create( 'Maximaal 2 cijfers achter de komma toegestaan' );
    d := '000' + d;
    v := Copy(v, 1, i-1);
    Result := TranslateChunk(d);
    if Result <> '' then
      Result := ' en ' + Result + ' cent';
  end;
  v := Trim(TranslateChunk(v));
  if v = '' then
    v := nul;
  Result := v + ' Euro' + Result;
end;

function Zegge(const Val: Int64): string; overload;
begin
  Result := Zegge(IntToStr(Val));
end;


Wat ik nu in totaal heb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Function TranslateChunk(Chunk)

    i = 0
    Do While Len(Chunk) >= 3
        's = copy(Chunk, Length(Chunk)-2, 3)
        s = Mid(Chunk, Len(Chunk)-2, 3)
        Result = TranslatePart(s,i) & Result
        'Delete(Chunk, Length(Chunk)-2, 3)
        ChunkLengte = Len(Chunk)
        Chunk = Left(Chunk,(ChunkLengte-2)) ' & Right(Chunk)
        i = i + 1
    Loop
    Result = Trim(Result)
End Function

Function TranslatePart(Part(), Power)
    Dim Pwr(5)
    Pwr(0) = ""
    Pwr(1) = "duizend"
    Pwr(2) = "miljoen"
    Pwr(3) = "miljard"
    Pwr(4) = "biljoen"

    Dim Pre(10)
    Pre(0) = "één"
    Pre(1) = "twee"
    Pre(2) = "drie"
    Pre(3) = "vier"
    Pre(4) = "vijf"
    Pre(5) = "zes"
    Pre(6) = "zeven"
    Pre(7) = "acht"
    Pre(8) = "negen"
    Pre(9) = "tien"

    Dim Tieners(10)
    Tieners(0) = "tien"
    Tieners(1) = "elf"
    Tieners(2) = "twaalf"
    Tieners(3) = "dertien"
    Tieners(4) = "veertien"
    Tieners(5) = "vijftien"
    Tieners(6) = "zestien"
    Tieners(7) = "zeventien"
    Tieners(8) = "achttien"
    Tieners(9) = "negentien"
    
    Dim Decai(10)
    Decai(2) = "twintig"
    Decai(3) = "dertig"
    Decai(4) = "veertig"
    Decai(5) = "vijftig"
    Decai(6) = "zestig"
    Decai(7) = "zeventig"
    Decai(8) = "tachtig"
    Decai(9) = "negentig"

    Result = ""
    Uni = CInt(Part(3))
    Deca = CInt(Part(2))
    Cent = CInt(Part(1))
   
    If Cent > 0 Then
        If Cent > 1 Then Result = Pre(Cent) 'zoveelhonderd
        Result = Result + "honderd"
    End If
    If (Cent = 1) And (Deca = 0) And (Uni > 0) Then Result = Result & "-en-"  'honderd _en_ vijf
    If Deca = 1 Then ' dertien
        Result = Result & Tieners(Uni)
    Else
        If Uni = 1 Then Result = Result & "een"       ' Pre[] biedt deze waarde niet.}
        If Uni > 0 Then Result = Result & Pre(Uni)
        If (Uni > 0) And (Deca > 0) Then Result = Result & "en"
        If Deca > 0 Then Result = Result & Decai(Deca)
    End If
    If Result > "" Then 'Doet deze het?
        If (Cent + Deca = 0) And (Uni = 1) And (Power = 1) Then Result = "" ' eenduizend --> duizend
        Result = Result & Pwr(Power) & " "
    End If
End Function

Function Zegge(Val)

    Const nul = "nul"
    
    V = "000" & val
    
    Result = ""
    'i = InStr(v, ",")
    'If i > 0 Then
    '   'd = Copy(v, i+1, length(v))
    '   d = Mid(v, (i+1), Len(v))
    '   If Len(d) > 2 Then
    '   Fout = "Maximaal 2 cijfers achter de komma toegestaan"
    '   d = "000" & d
    '   'v = Copy(v, 1, i-1)
    '   v = Mid(v, 1, i-1)
    '   Result = TranslateChunk(d)
    '   If Result <> "" Then
    '   Result = " en " & Result + " cent"
    'End If
    v = Trim(TranslateChunk(v))
    If v = "" Then v = nul
    Result = v + " Euro" & Result
End Function


Response.Write(Zegge(130000))


Het gaat nu fout op Part. Hij gaat, lijkt voor mij, de functie in als een string, in de functie wordt ie echter behandeld of het een array is, waardoor ik logischerwijs de volgende melding krijg.
Type mismatch: 'Part'

De functie moet een integer getal omzetten in een string. Misschien dat iemand deze functie in VB al heeft anders? Ik heb er overigens het één en ander uitgesloopt zoals kommagetallen en alles boven een biljoen.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.


  • Nutcaze
  • Registratie: Oktober 1999
  • Laatst online: 02-04 22:58
Ik heb 'm inmiddels werkend hoor toch. Kennelijk is Part een array van karakters (wat een string ook eigenlijk is natuurlijk). Mag gesloten worden.

Not all chemicals are bad. Without hydrogen or oxygen, for example, there would be no way to make water, a vital ingredient in beer.

Pagina: 1