| Autor |
Beitrag |
5M17H
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 22:10
Hi all.
Ich habe ja die Suche benutzt. Aber nie fündig geworden.
Ganz einfach:
Er soll aus 'code.txt' auslesen. In 'code.txt' sind nur zahlen drinne.
Jede zeile ist eine zahl von 3-5 stellen.
Wenn er zeile eins ausliest und dort steht: 5513 ist 5513 = a.
Momentan sieht das so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| dir := 'C:\code.txt'; AssignFile (f, dir); Reset (f); while not EOF(f)do begin ReadLn(f, zeile); memo1.text := zeile; end; |
Allerdings klappt da was nicht.
Er zeigt nur die Letzte zeile an.
Er muss alle zeilen speichern, um Sie bei der entschlüsselung nutzen zu können.
Das Dok besteht aus... 59zeilen.
Man gibt einen Text ein, das prog speicehrt udn ersetzt kurz zufor alles mit den codes aus der 'code.txt'.
zeile eins aus 'code.txt' steht für a zeile 2 für b usw.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 22:34
Hallo!
Mit memo1.text := zeile setzt Du immer den kompletten Inhalt des Memos neu. Mit anderen Worten: Du setzt den Inhalt jeweils auf die eine Zeile, die Du gerade ausgelesen hast.
Was Du möchtest, ist, die Zeile hinten dran hängen. Das macht man so:
Delphi-Quelltext 1:
| memo1.lines.Add(zeile) |
Memo.Lines ist eine Stringlist, also eine Liste der Zeilen, die das Memo enthält. Memo.Text ist ein String, der quasi alle Zeilen aneinander gehängt ist. Daher klappt's auch nicht, wenn Du den immer nue setzt
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 18.09.06 22:34
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 22:37
Supi,
aber jetzt muss ich auch auf jede zeile zugreifen
Delphi-Quelltext 1:
| memo1.Text := StringReplace (memo1.text, '5947 ', 'a', [rfReplaceAll]); |
anstatt 5947 muss da dann die erste zeile aus code.txt stehen...
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 22:37
Was ich vergessen hab:
Delphi-Quelltext 1:
| memo1.lines.loadfromfile(deinDateiname) |
lädt Dir eine komplette Datei direkt in Dein Memo 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 18.09.06 22:38
Ganz im Ernst... Grundlagen lernt man zwar auch durch "rumprobieren", aber du solltest dir mal ganz gezielt und in Ruhe - abseits irgendwelcher Projekte, an denen du dich momentan noch leicht zu übernehmen scheinst - den Crashkurs von Christian angucken, oder zum Beispiel die Tuts von dsdt.info, einfach nur, um Grundlagen-Wissen zu erlangen. Und desweiteren, anstatt im 10-Minuten-Takt irgendwelche Threads zu eröffnen, könntest du auch mal in der Delphi-Hilfe nachschauen... Da stehen dann auch sämltiche Eigenschaften eines Memos erklärt, sodass du auf die Problemlösung auch ohne weiteres hättest selber kommen können... Schau dir die Hilfe mal an, da wirst du vieles finden!
So... ich hoffe, das klang nicht zu böse...
Schönen Abend noch,
die Miri
//Edit: Arrgh, da war ich wohl gewaltig zu langsam...
_________________ Anonymes Eckenkind
Zuletzt bearbeitet von Miri am Mo 18.09.06 22:40, insgesamt 1-mal bearbeitet
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 22:40
Hallo!
zum Zugriff auf einzelne Zeilen:
Wie ich schon schrieb: memo.Lines ist eine Liste von Zeilen. Darauf kannst Du zugreifen wie auf ein Array. Und wie Du darauf zugreifst, findest Du im Crashkurs
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 22:41
Ichhabe extra ncoh geschrieben: ich habe geschaut wo ich weis, das da evtl was steht.
Im crashcours stand nix. Bei den Tuts auchniht. Die Hilfe? Nach dem letzten blcok CNC/CAD wo wir uns die hilfe zu autocad 2005 mechanical angesehen haben, lass ich die finger dafon.
Auserdem kann ich sowas eh nicht, ich bin ein schlechter sucher.
Tut mir leid 
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 22:44
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 18.09.06 22:44
Auch Suchen kann man lernen...
Und das ist in der Delphi-Hilfe sogar gar nicht mal schwer:
Cursor auf Memo1.Text stellen und auf F1 drücken...
Ich denk mal, dass kriegst sogar du hin!! 
_________________ Anonymes Eckenkind
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 18.09.06 22:45
Hm ich versteh nich ganz  du willst eine Textdatei in ein Memo schreiben oder wie war das gemeint?
Wenns so einfach ist, dann ist die Lösung Memo1.Lines.LoadFromFile(dateiname);. Das lädt dir die Datei ins Memo, wie schon einer mal geschrieben hat. Aber hab dein Problem jetzt nich so ganz verstanden ^^
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 22:51
Nein,
ich will das momentan zur sicherheit machen.
Später wird das txt nciht angezeigt, sondern verscheidene zeilen eingelesen und bei
Delphi-Quelltext 1:
| memo1.Text := StringReplace (memo1.text, '5947 ', 'a', [rfReplaceAll]); |
eingefügt. Damit der user seinen eigenen verschlüsselungscode hat. momentan klappt alles, aber ich will ja das jeder die code.txt hat, wo er bestimmen kann das a = 5564 ist und nciht vordefiniert a = 5947.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var f : TextFile; dir : string; i : integer; zeile : Array of Integer; begin if OpenDialog1.Execute() then begin i := 0; dir := 'C:\code.txt'; AssignFile (f, dir); Reset (f); while not EOF(f)do begin ReadLn(f, zeile[i]); i := i + 1; memo1.text := zeile[i]; end; |
so siehts aus aber:
"main.pas: inkomplitable typen."
(nutze borland delphi 2005)
i : damit ich später sagen kann zeile[2]; oder zeile[3]; i wird immer eins hochgezählt, weil ich muss ja einmal beim öffnen und einmal bein speichern des doks auf die 'zeile' zugreifen damit ich sagen kann
Delphi-Quelltext 1:
| memo1.Text := StringReplace (memo1.text, zeile[1], 'a', [rfReplaceAll]); |
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 23:00
Schau Dir mal in entsprechenden Quellen den Unterschied zwischen String und Integer an. Außerdem schau Dir mal an, wie man bei dynamischen Arrays die Länge festlegt, damit man sie verwenden kann. Und dann schau Dir nochmal Deinen Code an.
Und wieso steht in Deinem Quelltext immer noch memo1.text := ... nachdem Dir dreimal gesagt wurde, dass da ein Fehler liegt?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 18.09.06 23:01
OK Warte - du hast code.txt, im stil
Quelltext 1: 2: 3: 4: 5:
| 57334 6135 562345 234246 1123 etc... |
und nun steht 57334 für a und 6135 für b und so weiter. richtig? Nun willst du von a bis z in einem Text alle zahlen mit buchstaben, bzw buchstaben mit zahlen ersetzen?
Wie auch immer. Dein Code KANN nicht funkionieren. zeile[1] ist ja ein Integerwert, kein String! Und per ReadLn bekommst du nur Strings, genauso wie auch das Memo nur Strings aufnehmen kann! Ausserdem haben dir schon andere die Lösung gezeigt. Dein Code ÜBERSCHREIBT bei jedem Schleifendurchlauf den Inhalt des Memos. Klar, dass nicht alles angezeigt wird! Richtig wäre:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var zeile: String; begin
while not EOF(f)do begin ReadLn(f, zeile); memo1.lines.add(zeile); end; |
Falls du aber den Array zeile dringend brauchst, musst du seine Länge definieren.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var zeile: array of String; begin
i:=0; while not EOF(f)do begin inc(i); SetLength(zeile, i); ReadLn(f, zeile[i]); memo1.lines.add(zeile[i]); end; |
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 23:09
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 23:12
Wenn Du die Länge eines dynamischen Arrays auf 1 setzt, ist der höchste Index, auf den Du zugreifen kannst 0. Das sollte Dir sagen, wo der Fehler ist 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 18.09.06 23:15
 mein fehler. Aber das hättest du auch selbst rausgefunden, wenn du das Tut oder den Crashkurs zu Arrays gelesen hättest ;> Wie man das Problem behebt, findest du sicher selbst raus, wenn du dir TUFKAPLS Post nochmal genauer durchließt ^^
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 23:22
Ich danke allen.
Delphi-Quelltext 1:
| memo1.Text := StringReplace (memo1.text, zeile[3], 'a', [rfReplaceAll]); |
Er schreibt trotzdem 'h1264' anstatt 'ha'.
Ich habe mir gedacht: Wenn i ;= 250 ist kann er mehr als 4*60 speichern. soviel bruach ich nciht.
jetzt will ich also '1264', dank 'code.txt' wo in der ersten zeile 1264 steht, durch a ersetzen. Er zeigt mir trotzdem 1264. Warum?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 18.09.06 23:30
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 18.09.06 23:31
Nein.
Ich gebe zeile1 ein und es passier trotzdem nix.
Desswegen ja.
|
|