Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Prozentzahl von Buchstaben im Memofeld
Philipp_Frank - Mo 13.01.03 13:47
Titel: Prozentzahl von Buchstaben im Memofeld
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
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. - 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:
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. - 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 - 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 - 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 [
http://www.wolff68.de/german/Delphi/downloads/CharStat.zip]
In der AusgabeForm:
1. Const AscIImin = 32 und AscIImax = 122
2. Folgende Arrays:
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
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
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
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
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)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!