Autor |
Beitrag |
HammerHai
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 31.10.07 10:53
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:string; var rpAusgabeSoll:string; var 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; tmpStr := ''; inc(nr); inc(k); end; if (nr < 1) or (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 < 1) or (nr > 3) or (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 jasocul: 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
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mi 31.10.07 10:59
Hi, erstmal
Das finde ich jetzt mal extrem lustig
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
Wäre nett, wenn Du mal schreiben könntest, worum es Dir geht.
_________________ Gruß Aga
|
|
HammerHai 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 31.10.07 12:17
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 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 31.10.07 12:28
warum muss ich die unproportionalen schriften nehmen?
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mi 31.10.07 13:04
jasocul 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 220
Erhaltene Danke: 1
Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
|
Verfasst: Mi 31.10.07 13:51
Doch, in gewissen Sinne schon:
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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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:
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;
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:string; var rpAusgabeSoll:string; var rpAusgabeIst:string) :boolean; ... |
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); lboxumsatz.Items.Add(StrExpand(tmpMonat,9)+'|'+StrExpand(tmpSoll,8)+'|'+StrExpand(tmpIst,9)); 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 Christian S..
|
|
HammerHai 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 31.10.07 15:52
HammerHai 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...
Wenn dir was unklar ist, dann frag bitte nach...
HammerHai 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.
|
|