Autor Beitrag
Philipp_Frank
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 13.01.03 13:47 
Hi,
habe in delphi 6 ein memofeld. Nun schreibe ich da z.B. 20 Buchstaben rein, wenn man auf analysebutton klickt soll für jeden buchstaben die prozentuale ausgabe angegeben werden, am besten in einem neuen fenster, geht das, wenn ja wie? Kann man das nicht mit nem array machen? Also praktisch intern die prozentuale anzahl mit variablen errechnen, und dann mit "gauge" in samples veranschaulichen. Brauche wirklich hilfe!!! Kann mir jemand den code schreiben.
Das ist mein bisheriger code mit dem memofeld, in das man die texte reinlädt.
Könnt Ihr mir den vervollständigen
ausblenden volle Höhe Quelltext
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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ToolWin, ComCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    ToolBar1: TToolBar;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    OpenDialog2: TOpenDialog;
    OpenDialog3: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
close
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.Loadfromfile(Opendialog1.Filename)
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.Filename);
end;

procedure TForm1.Button5Click(Sender: TObject);
var filename : string;
begin    filename := 'H:\Html\abc.txt';
if OpenDialog2.Execute then
Memo1.Lines.Loadfromfile(Opendialog2.filename)
end;

procedure TForm1.Edit1Change(Sender: TObject);
var count : integer;
begin



end;

end.



Bin echt verzweifelt!
Gruß Philipp :oops:
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mo 13.01.03 13:59 
also das mit dem gauge, wenn du schon die Prozentuale anzahl hast kannst du so machen: gauge1.maxvalue:=anzahlbuchstabengesamt
dann könntest du z.B. nen Pulldownmenu auswählen lassen, welche buchstaben prozentual angegeben werden sollen...
dann sagst du gauge1.progress:=round(anzahlbuchstabe/anzahlbuchstabengesamt*100);
des weiteren, für das zählen der Buchstaben könntest du ein array of char machen, wobei das Problem ist, dass du festlegen musst welcher Buchstabe z.B. bei zaehlarray[10] gezählt werden soll...

das überprüfen, wieviele Buchstaben im Memofeld jeweils vorahnden sind brauchst du ne Schleife: z.B. so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var s:string;
begin
for i:=1 to memo1.lines.count-1 do
 begin 
  s:=memo1.lines[i];
  for k:=1 to length(s) do
   begin
    case s[k] of 
     'a':inc(variableanzahl_a);
     'b':inc(variableanzahl_b);
       ...
    end; 
   end;
 end;

Fiji-Fighter
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mo 13.01.03 14:02 
ach noch was: wofür deklarierst du in Button5click eie Variable Filename, die du eh nicht benutzt???

Fiji-Fighter
Philipp_Frank Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 13.01.03 14:04 
Titel: ohne pulldown
Und wie mache ich das, wenn ich kein pulldownmenü haben will, einfach, alle gauge prozzesse für jeden buchstaben unternander schreiben?
Kannst du mir das nicht direkt in meinen code einbauen bitte, glaube du hast richtig ahnung.
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Mo 13.01.03 22:11 
Normalerweise mach ich ja nicht anderer Leute Hausaufgaben.
Aber weil ich grad 1 Stündchen Zeit und Lust hatte:
Hier ein Link

In der AusgabeForm:
1. Const AscIImin = 32 und AscIImax = 122
2. Folgende Arrays:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    { Private-Deklarationen }
    // Variable für GesamtZahl der Buchstaben
    Gesamt    : LongWord;
    // AscII-Werte von 32 ' ' bis 122 'z'
    Anzahl    : Array[AscIImin..AscIImax] of Word;
    // Edits zur Anzeige des Buchstabens
    aEdit     : Array[AscIImin..AscIImax] of TEdit; 
    // Progressbars
    aProgress : Array[AscIImin..AscIImax] of TProgressBar;
    // Labels zur Anzeige der Prozente
    aLabel    : Array[AscIImin..AscIImax] of TLabel;
3. Edits, ProgressBars und Labels erzeugen (Code spar ich mir hier)
4. public Procedure CalcStats, und in dieser...
4.1. AlteWerte Löschen
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
  { Alte Werte löschen }
  For i := AscIImin to AscIImax do begin
    aProgress[i].Position := 0;
    aLabel[i].Caption := '0%';
  end;
  Gesamt := 0;
4.2. Zählen
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  { Buchstaben durchgehen und zählen }
  For i := 0 to Length(Memo1.Text)-1 do begin
    Found := Ord(Memo1.Text[i]);
    IF (Found >= AscIImin) and (Found <= AscIImax) then begin
      Inc(Anzahl[Found]);
      Inc(Gesamt);
    end;
  end;
4.3. Ausgeben
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
  { Ausgabe der Werte }
  For i := AscIImin to AscIImax do begin
    Prozent := (Anzahl[i] / Gesamt) * 100;
    aProgress[i].Position := Round(Prozent);
    aLabel[i].Caption := Format('%f',[Prozent])+'%';
  end;

In der Hauptform brauchst nur einen OpenDialog und einen Button
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
  If OpenDialog1.Execute then begin
    StatForm.Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
    StatForm.Caption := 'Statistik von '+ExtractFileName(OpenDialog1.FileName);
    StatForm.CalcStats;
    StatForm.ShowModal;
  end;

Viel Spaß damit, und sag mir die Note, die ich dafür bekomm 8)

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."