Autor Beitrag
HammerHai
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 10:53 
ausblenden volle Höhe Delphi-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:
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:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
var
  frmUmsatz: TfrmUmsatz;
const TRENNZEICHEN =';';
implementation

{$R *.DFM}

var
  FilePath :String;
  tmpStringList :TStrings;

function EinlesenDaten(pEingabeStr:string; pTrennzeichen:char; var rpAusgabeMonat:stringvar rpAusgabeSoll:stringvar rpAusgabeIst:string) :boolean;
var
  k, nr :integer;
  tmpStr :string;
begin
try
  Result := true;
  nr := 1;
k := 0;
repeat
  inc(k);
  if (pEingabeStr[k] = pTrennzeichen) or (k = length(pEingabeStr)+1)
        then
          begin
            case nr of
              1: rpAusgabe ##:= tmpStr;
               2: rpAusgabe ## := tmpStr;
              3: rpAusgabe ## := tmpStr;
            end// of case
            tmpStr := '';
            inc(nr);
           inc(k);
          end;
      if (nr < 1or (nr > 4)
        then
          begin
            MessageDlg('Fehler!'+#13+'Die Datei ist zerstört!'+#13+'Der Vorgang wird abgebrochen!', mtError, [mbOK], 0);
            exit;
          end;
      tmpStr := tmpStr + pEingabeStr[k];
until ((nr < 1or (nr > 3or (k = length(pEingabeStr)+1));

except
  Result := false;
end;

end;

function EinlesenDatei(pFilePath:string)  :boolean;
begin
try
  Result := true;
  tmpStringList.LoadFromFile(pFilePath);
except
  Result := false;
end;
end;

procedure Tfrm#####.btnSchobClick(Sender: TObject);
var
  k :integer;
  tmpStr, tmp##, tmpSoll, tmpIst :string;
begin
FilePath:='Pfad';
if EinlesenDatei(FilePath)
  then
    begin
      lboxUmsatz.Clear;
      lboxUmsatz.Items.Add('  ###### |  ####  |  #######');
      lboxUmsatz.Items.Add('---------|--------|---------');
        for k := 0 to tmpStringList.Count-1 do
          begin
            tmpStr := tmpStringList.Strings[k];
            EinlesenDaten(tmpStr, TRENNZEICHEN, tmpMonat, tmpSoll, tmpIst);
            lboxumsatz.Items.Add(tmpMonat+'    | '+tmpSoll+'    |'+tmpIst);
          end;
    end
else
  MessageDlg('Fehler!'+#13+'Es trat ein Fehler bei der DatenVerarbeitung auf!'+', mtError, [mbOk], 0);
end;




procedure TfrmUmsatz.btnAdlerClick(Sender: TObject);
var
  k :integer;
  tmpStr, tmp####, tmp###, tmp### :string;
begin
FilePath:='
Pfad';
if EinlesenDatei(FilePath)
  then
    begin
      lboxUmsatz.Clear;
      lboxUmsatz.Items.Add('
  #####  |  #####  | ####   ');
      lboxUmsatz.Items.Add('
---------|--------|---------');
        for k := 0 to tmpStringList.Count-1 do
          begin
            tmpStr := tmpStringList.Strings[k];
            EinlesenDaten(tmpStr, TRENNZEICHEN, tmpMonat, tmpSoll, tmpIst);
            lboxumsatz.Items.Add(tmpMonat+'
    | '+tmpSoll+'    |'+tmpIst);
          end;
    end
else
  MessageDlg('
Fehler!'+#13+'Es trat ein Fehler bei der DatenVerarbeitung auf!'+', mtError, [mbOk], 0);
end;


procedure TfrmUmsatz.FormActivate(Sender: TObject);
begin
tmpStringlist := TStringList.Create;
FilePath := '1123';

end;

procedure TfrmUmsatz.FormDestroy(Sender: TObject);
begin
tmpStringList.Free;
end;

procedure TfrmUmsatz.btnHygieClick(Sender: TObject);

var
  k :integer;
  tmpStr, tmpMonat, tmpSoll, tmpIst :string;
begin
FilePath:='Pfad';
if EinlesenDatei(FilePath)
  then
    begin
      lboxUmsatz.Clear;
      lboxUmsatz.Items.Add('  #####  |  ####  |  ########');
      lboxUmsatz.Items.Add('---------|--------|---------');
        for k := 0 to tmpStringList.Count-1 do
          begin
            tmpStr := tmpStringList.Strings[k];
            EinlesenDaten(tmpStr, TRENNZEICHEN, tmpMonat, tmpSoll, tmpIst);
            lboxumsatz.Items.Add(tmpMonat+'    | '+tmpSoll+'    |'+tmpIst);
          end;
    end
else
  MessageDlg('Fehler!'+#13+'Es trat ein Fehler bei der DatenVerarbeitung auf!'+, mtError, [mbOk], 0);
end;


procedure TfrmUmsatz.btnSoftwareClick(Sender: TObject);

var
  k :integer;
  tmpStr, tmpMonat, tmpSoll, tmpIst :string;
begin
FilePath:='Pfad';
if EinlesenDatei(FilePath)
  then
    begin
      lboxUmsatz.Clear;
      lboxUmsatz.Items.Add('  #####  |  ####  |   ###   ');
      lboxUmsatz.Items.Add('---------|--------|---------');
        for k := 0 to tmpStringList.Count-1 do
          begin
            tmpStr := tmpStringList.Strings[k];
            EinlesenDaten(tmpStr, TRENNZEICHEN, tmpMonat, tmpSoll, tmpIst);
            lboxumsatz.Items.Add(tmpMonat+'    | '+tmpSoll+'    |'+tmpIst);
          end;
    end
else
  MessageDlg('Fehler!'+#13+'Es trat ein Fehler bei der DatenVerarbeitung auf'!+', mtError, [mbOk], 0);
end;


end.



Moderiert von user profile iconjasocul: Topic aus Dateizugriff verschoben am Mi 31.10.2007 um 10:46


Zuletzt bearbeitet von HammerHai am Mi 31.10.07 11:48, insgesamt 2-mal bearbeitet
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: Mi 31.10.07 10:59 
Hi, erstmal

:welcome:

Das finde ich jetzt mal extrem lustig :mrgreen:

Die meisten lassen es hier an Erläuterungen und Quelltext fehlen und wenn, bekommt man maximal soviel Quelltext zu sehen, dass man da auch nicht viel mit anfangen kann.

Aber jetzt nur Quelltext, das ist mal was Neues :wink:

Wäre nett, wenn Du mal schreiben könntest, worum es Dir geht.

_________________
Gruß Aga
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 11:24 
hallo thx.

also mir gehts um das einlesen einer text datei und die ausgeben in eine Listbox. das hab ich auch mit diesem Quellcode(siehe oben) geschafft aber, ich will das noch richtig formatieren, dass alles untereinander steht z.b.

Name______Nachname
yxc________yxcycxy
yxc________rtgadfhg
afsssad____dgfadfg
werwtevx___fdhgsdfg

so sollte es aussehen aber bei mir sieht des so aus:

name nachname
yxc__yxcycxy
yxc_rtgadfhg
afssad__dgfadfg
werwtevx__fdhgsdfg

__ = abstand!

versteht ihr mein prob???
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 31.10.07 11:43 
Ohne jetzt Deinen Quelltext zu lesen, würde ich Dir folgenden Ansatz vorschlagen:
1. Stelle sicher, dass Du eine Schrift nimmst, die nicht proportional ist (z.B. Courier).
2. Schreibe Dir eine kleine Funktion, die Dir vor dem zweiten Wort entsprechend viele Füllzeichen einfügt werden, damit der Abstand stimmt. Dafür sollten die Routinen Pos und insert genügen.

Und ändere bitte den Titel Deines Topics. Denn der jetzige beschreibt ja gar nicht Dein Problem.
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 31.10.07 11:50 
Du zerlegst doch den String irgendwie und fügst ihn dann wieder zusammen. Vor diesem Zusammenfügen musst du prüfen wie lang der Teilstring "name" ist. Ist er kürzer wie x, dann musst die die Differenz an Zeichen zwischen x und length(name) einfach bei name anhängen. Um es mal "sprachlich" zu "programmieren".

_________________
mfg. Joel
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 12:07 
kk. könnt ihr mir en quellcode schreiben weil ich noch en noob bin pls oder halt helfen.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 31.10.07 12:17 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Function StrExpand (oldStr : String; NewLen : Integer) : String;
begin
  if Length(oldStr) > NewLen then
  begin
    oldStr := copy(oldStr, 1, NewLen);
  end;
  while Length(oldStr) < NewLen do
  begin
    oldStr := oldStr + ' ';
  end;
  Result := oldStr;
end;

Auf die Schnelle und ungeprüft.
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 12:28 
warum muss ich die unproportionalen schriften nehmen?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 31.10.07 12:59 
Starte mal Deine Textverarbeitung.

Schreibe dann 20 mal "i" in eine Zeile. In die nächste schreibst Du 20 mal "m".
Formatiere den Text einmal mit proportionaler Schrift und dann mit einer nicht-proportionalen Schrift.

Vergleiche das Ergebnis.

Du wirst feststellen, dass bei proportionaler Schrift die Zeichenbreite für jedes Zeichen anders sein kann. Das ist aber bei Deinem Vorhaben sehr störend. Ich denke, man kann das Problem auch mit Proportionalschrift lösen, aber das dürfte deutlich über Dein Niveau hinaus gehen (ist nicht böse gemeint).
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 13:01 
kk thx dann mal.

ich hab folgendes prob.

in meiner list box steht(sieht anhang)

ich will aber dass alles schön untereinander ist. geordnet!
Einloggen, um Attachments anzusehen!
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 13:04 
user profile iconjasocul hat folgendes geschrieben:
Starte mal Deine Textverarbeitung.

Schreibe dann 20 mal "i" in eine Zeile. In die nächste schreibst Du 20 mal "m".
Formatiere den Text einmal mit proportionaler Schrift und dann mit einer nicht-proportionalen Schrift.

Vergleiche das Ergebnis.

Du wirst feststellen, dass bei proportionaler Schrift die Zeichenbreite für jedes Zeichen anders sein kann. Das ist aber bei Deinem Vorhaben sehr störend. Ich denke, man kann das Problem auch mit Proportionalschrift lösen, aber das dürfte deutlich über Dein Niveau hinaus gehen (ist nicht böse gemeint).



nene hasch scho recht. ich bin net de beste im Proggen.

des isch hart mit dene schriften, des hab ich jetzt net gewusst!
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 13:11 
des trennen hab ich von jemand gehört kann man auch mit Splitt irgentwas machen. oder wie geh i ch da vor ich hab keine ahnung und bin am verzweifeln.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 31.10.07 13:20 
Wenn Du in Zeile 76 Deines oben eingetragenen Quelltextes meine Funktion (s.o.) einbaust. solltest Du ein akzeptables Ergebnis bekommen.
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 13:41 
hab ich probt aber kommt fehler:

[Error] SollistumsatzU.pas(134): Statement expected but 'FUNCTION' found


ich kann doch keine function in eine procedur schreiben oder??

also ich mein so :

procedure ................

.
.
.

Function StrExpand (oldStr : String; NewLen : Integer) : String;
.
.
.
.

end;
uko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220
Erhaltene Danke: 1

Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
BeitragVerfasst: Mi 31.10.07 13:51 
Doch, in gewissen Sinne schon:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure bla;
  function DoBla: string;
  begin
    ... code von DoBla
  end;
begin
  ... code von bla
end;


Grüße,
Uli
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 31.10.07 14:05 
@uko:
Das ist zwar korrekt, aber führt am Thema vorbei.

@HammerHai:
Du hast doch in Deinem Programm schon eine eigene Funktion geschrieben (EinlesenDaten) und benutzt sie auch. Dann sollte es doch kein Problem sein, eine weiter Funktion einzubauen.
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 14:33 
nun ja ich kappier grad nix mehr. einer hat gesagt mit ner split function gibts sowas überhaupt in delphi. ich weiss nicht mehr weiter. sitz jetzt seit 5stunden an diesem rotz.

@jasocul: wie schon gesagt wenn ich die funktion da einfüge un dann de debugger starten will kommten en haufen fhler kannst nich du das mal kurz einbauen und dann posten ich ver steh das nich wie du das meinst.

oder kann das jemand anderes jasocul´s function kurz in den quelltext einbauen und ann wieder posten.


bitte um hilfe.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 31.10.07 14:50 
SPLIT:
Es gibt etwas in der Art: Einlesen in eine StringList als DelimitedText. Aber da Dein Source bis auf das eine Problem läuft, solltest Du es erstmal beim jetzigen Stand belassen.

Source:
ausblenden Delphi-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:
var
  frmUmsatz: TfrmUmsatz;
const TRENNZEICHEN =';';
implementation

{$R *.DFM}

var
  FilePath :String;
  tmpStringList :TStrings;

// Hier einbauen:
Function StrExpand (oldStr : String; NewLen : Integer) : String;
begin
  if Length(oldStr) > NewLen then
  begin
    oldStr := copy(oldStr, 1, NewLen);
  end;
  while Length(oldStr) < NewLen do
  begin
    oldStr := oldStr + ' ';
  end;
  Result := oldStr;
end;

function EinlesenDaten(pEingabeStr:string; pTrennzeichen:char; var rpAusgabeMonat:stringvar rpAusgabeSoll:stringvar rpAusgabeIst:string) :boolean;
...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
      lboxUmsatz.Clear;
      lboxUmsatz.Items.Add('  ###### |  ####  |  #######');
      lboxUmsatz.Items.Add('---------|--------|---------');
        for k := 0 to tmpStringList.Count-1 do
          begin
            tmpStr := tmpStringList.Strings[k];
            EinlesenDaten(tmpStr, TRENNZEICHEN, tmpMonat, tmpSoll, tmpIst);
// Hier Änderung:     
       lboxumsatz.Items.Add(StrExpand(tmpMonat,9)+'|'+StrExpand(tmpSoll,8)+'|'+StrExpand(tmpIst,9));
// Evtl. die Zahlen für die Länge anpassen. Ich könnte mich verzählt haben.
          end;


Ich habe jetzt nur Code-Ausschnitte aus Deinem Source verwendet. Aber ich hoffe, Du findest Dich zurecht.

Um dich mit den Delphi-Grundlagen vertraut zu machen, empfehle ich dir den Crashkurs von user profile iconChristian S..
HammerHai Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 31.10.07 15:42 
es funzt thx an alle.


ich hab aber ein weiteres prob und zwar die bündigkeit links/rechtsbündig und die formatierung wie tausendertrennzeichen und auf zwei stellen runden.


pls help
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 31.10.07 15:52 
user profile iconHammerHai hat folgendes geschrieben:
ich hab aber ein weiteres prob und zwar die bündigkeit links/rechtsbündig
Wenn du die Funktion StrExpand verstanden hättest, dann wäre das kein Problem für dich das entsprechend zu ändern... :roll:
Wenn dir was unklar ist, dann frag bitte nach...

user profile iconHammerHai hat folgendes geschrieben:
und die formatierung wie tausendertrennzeichen und auf zwei stellen runden.
Eine neue Frage gehört nicht in den selben Thread, die Forensuche sollte dir da schon helfen, ansonsten erstelle bitte einen neuen Thread für die Frage.
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.