Toon posts:

[Delphi] strtoint alleen als int is *

Pagina: 1
Acties:

Verwijderd

Topicstarter
dit is wat ik heb gemaakt tot nu toe, het programma moet een bestand met allemaal cijfers(van 4 of 5 getallen) en letters(i of m) vertalen naar het aantal letters en gem van een rij, het is me voor zover gelukt tot het punt dat ik moet bepalen als een str int is of niet, daar krijg ik covert error...
wie weet wat hier mis aan is?
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
Function tform1.IsNumber(str:string):boolean;
begin
  result:=true;
  try
    strtoint(str);
  except
    on exception do result:=false;
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
data : textfile;
text,tex: string;
tot,count,aantal,A,n: integer;
gem: real;

begin
  assignfile(data, 'puredata.txt');
  reset(data);
  while not eof(data) do
  begin
    readln(data,text);
    count:=0;
    tot:=0;
    aantal:=0;
    for n:= 1 to 31 do
    begin
      tex:= copy(text, 1, pos((chr(9)),text)-1);
      text:= copy(text, pos((chr(9)),text)+1, length(text));
      if (tex = 'i') or (tex = 'm') then
      begin
        count:= count + 1
      end;
      if IsNumber(tex) then
      begin
        A:= strtoint(tex);
        tot := tot + A;
        aantal :=aantal +1;
      end;
    end;
    tex:= copy(text, 1, length(text));
    if (tex = 'i') or (tex = 'm') then
    begin
      count:= count + 1
    end;
    if IsNumber(tex) then
    begin
    A:= strtoint(tex);
    tot := tot + A;
    aantal :=aantal +1;
    end;
  end;
  memo1.lines.add(inttostr(count));
  memo1.lines.add(inttostr(tot));
  gem:= tot/aantal;
  memo1.lines.add(floattostr(gem));
  closefile(data);
end;

Verwijderd

De Delphi IDE geeft foutmeldingen default altijd door, ongeacht een try repeat. Als je de gecompilede .exe gebruikt heb je hier geen last van.

Overigens is het wel netjes om in je topictitel te zetten welke taal het betreft.

Als laatste, is dit bv. al eleganter:

code:
1
 If MyChar in ['0'..'9'] then result:=true;


of nog compacter:

code:
1
Result:=(MyChar in ['0'..'9'])


De code die je nu hier neergezet hebt is ERG smerig (nofi)

[ Voor 12% gewijzigd door Verwijderd op 21-05-2004 00:08 ]


Verwijderd

Topicstarter
buiten delphi geeft hij idd geen fout! merci
en smerig, ja ik ben beginner he!
kan dicht wat mij betreft

Verwijderd

d'r klopt wel erg veel niet aan die code.. een paar tips:

code:
1
tex:= copy(text, 1, pos((chr(9)),text)-1);


wat als die chr(9) niet voorkomt in text?

code:
1
text:= copy(text, pos((chr(9)),text)+1, length(text));


je wilt in feite het gedeelte voor de chr(9) weg hebben. Het is dan netter om delete() te gebruiken, bv:

code:
1
delete(text, 1, pos(chr(9),text)+1);



code:
1
2
3
4
if (tex = 'i') or (tex = 'm') then
      begin
        count:= count + 1
      end;


Makkelijker is:
code:
1
if tex in ['i','m'] then inc(count);


Deze opdracht begrijp ik niet helemaal:

code:
1
tex:= copy(text, 1, length(text));


waarom doe je dan niet gewoon tex:=text ? Dat is namelijk gelijk aan wat je nu doet.

Die hele for loop.. waarom herhaal je dezelfde code nog eens? Waarom doe je niet gewoon for n:= 1 to 32?

code:
1
tex:= copy(text, 1, pos((chr(9)),text)-1);


let op: hier vul je tex met de tekst tussen de 1e positie van de string, tot en met de positie van chr(9). Hoe weet je dat dit maar 1 karakter is?

[ Voor 3% gewijzigd door Verwijderd op 21-05-2004 03:54 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

offtopic:
Topics gaan niet dicht als het probleem opgelost is, alleen als een topic niet aan de regels van dit forum voldoet. En dat valt bij dit topic wel mee. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • schoene
  • Registratie: Maart 2003
  • Laatst online: 22-05 12:29
Als je niet zeker bent dat een string een int is, kan je ook
TryStrToInt gebruiken.

Verwijderd

Topicstarter
owkee, ik ga zometeen naar al die dingen kijken wat ik voor nu kan zeggen: trystrotoint doet het niet, omdat ik versie 5 heb...
en ik weet precies hoe mijn bestand eruit ziet, dat heb ik zo gemaakt met excel, dus bij ieder ander bestand mega error, maar dat boeit niet voor nu.
ik zal strax nog effe terug komen eerst wat andere dingen doen :)

Verwijderd

Verwijderd schreef op 21 mei 2004 @ 09:38:
owkee, ik ga zometeen naar al die dingen kijken wat ik voor nu kan zeggen: trystrotoint doet het niet, omdat ik versie 5 heb...
Probeer ander StrToIntDef eens.

Verwijderd

Topicstarter
Verwijderd schreef op 21 mei 2004 @ 10:21:
[...]

Probeer ander StrToIntDef eens.
dat is niet de bedoeling, want dan krijgen de dingen die niet int moeten worden nog een integere waarde.... toch?

Verwijderd

Verwijderd schreef op 21 mei 2004 @ 11:22:
[...]dat is niet de bedoeling, want dan krijgen de dingen die niet int moeten worden nog een integere waarde.... toch?
Ja, maar meestal gebruik ik dan als default een waarde die normaleter niet voor kan komen ( -1, of een heel groot getal ), en controleer ik daar op.
Pagina: 1