Autor Beitrag
5M17H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
dir := 'C:\code.txt'//dateipfad
AssignFile (f, dir); //datei öffnen, dir = dateipfad
Reset (f); //'f' zurücksetzen
while not EOF(f)do //weil das dokument ncoh nciht zu ende ist tue
  begin
    ReadLn(f, zeile); //zeile auslesen und in 'zeile' speichern
    memo1.text := zeile; //memo1.text soll JEDE zeile anzeigen. <Sicherheitscheck.
  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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 18.09.06 22:34 
user profile icon5M17H hat folgendes geschrieben:

Momentan sieht das so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
dir := 'C:\code.txt'//dateipfad
AssignFile (f, dir); //datei öffnen, dir = dateipfad
Reset (f); //'f' zurücksetzen
while not EOF(f)do //weil das dokument ncoh nciht zu ende ist tue
  begin
    ReadLn(f, zeile); //zeile auslesen und in 'zeile' speichern
    memo1.Lines.Add(zeile)//memo1.text soll JEDE zeile anzeigen. <Sicherheitscheck.
  end;


Damit fügst du den Eintrag hinzu, vorher hast du immer den gesamten Text überschrieben.

Edit: Ich war aber erster! :bawling:

_________________
"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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 18.09.06 22:37 
Supi,
aber jetzt muss ich auch auf jede zeile zugreifen

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 18.09.06 22:37 
Was ich vergessen hab:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 18.09.06 22:41 
Ichhabe extra ncoh geschrieben: ich habe geschaut wo ich weis, das da evtl was steht. :wink:

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 :lol:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 18.09.06 22:44 
user profile icon5M17H hat folgendes geschrieben:
Die Hilfe? Nach dem letzten blcok CNC/CAD wo wir uns die hilfe zu autocad 2005 mechanical angesehen haben, lass ich die finger dafon. :( :(
Mit Verlaub, das ist eine selten dämliche Ausrede. Was hat die Hilfe von AutoCAD mit der von Delphi zu tun? In Delphi setzt Du den Cursor im Editor auf das Wort "memo1", drückst F1 und bekommst ganz viele Informationen

user profile icon5M17H hat folgendes geschrieben:
Auserdem kann ich sowas eh nicht, ich bin ein schlechter sucher.
Tut mir leid :lol:
Hab ich nicht so den Eindruck. Ich helfe wirklich gerne, aber wenn Du anfängst Arbeit auf uns abzuwälzen, weil Du keine Lust hast die Hilfe zu bemühen, werde ich grantig.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 18.09.06 22:45 
Hm ich versteh nich ganz :gruebel: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: 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

ausblenden 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.

ausblenden 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 //wenn der dialog zum öfnnen einer datei betätigt ist dann
  begin
    i := 0;
    dir := 'C:\code.txt'//dateipfad
    AssignFile (f, dir); //datei öffnen, dir = dateipfad
    Reset (f); //'f' zurücksetzen
    while not EOF(f)do //weil das dokument ncoh nciht zu ende ist tue
    begin
      ReadLn(f, zeile[i]); //zeile auslesen und in 'zeile' speichern
      i := i + 1;
      memo1.text := zeile[i]; //memo1.text soll JEDE zeile anzeigen. <Sicherheitscheck.
    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
ausblenden Delphi-Quelltext
1:
memo1.Text :=  StringReplace (memo1.text, zeile[1], 'a', [rfReplaceAll]);					
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 18.09.06 23:01 
OK Warte - du hast code.txt, im stil
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
{...}
var zeile: String;
begin
{...}
    while not EOF(f)do //weil das dokument ncoh nciht zu ende ist tue 
    begin 
        ReadLn(f, zeile); //zeile auslesen und in 'zeile' speichern 
        memo1.lines.add(zeile); //memo1.text soll JEDE zeile anzeigen. <Sicherheitscheck. 
    end;

Falls du aber den Array zeile dringend brauchst, musst du seine Länge definieren.
ausblenden 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 //weil das dokument ncoh nciht zu ende ist tue 
    begin
        inc(i); //inc steht für increase: bedeutet das gleiche wie i:=i+1 nur kürzer.
        SetLength(zeile, i); //größe des Arrays anpassen
        ReadLn(f, zeile[i]); //zeile auslesen und in 'zeile' speichern 
        memo1.lines.add(zeile[i]); //memo1.text soll JEDE zeile anzeigen. <Sicherheitscheck. 
    end;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 18.09.06 23:09 
ausblenden Quelltext
1:
access violation at 0x00401c4c.... ect					


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var f : TextFile;
    dir : string;
    i : integer;
    zeile : Array of string;
begin
  if OpenDialog1.Execute() then //wenn der dialog zum öfnnen einer datei betätigt ist dann
  begin
    i := 0;
    dir := 'C:\code.txt'//dateipfad
    AssignFile (f, dir); //datei öffnen, dir = dateipfad
    Reset (f); //'f' zurücksetzen
    while not EOF(f)do //weil das dokument ncoh nciht zu ende ist tue
    begin
      inc(i); //increas (i := i + 1;)
      SetLength(zeile, i); //größe des arrays anpassen
      ReadLn(f, zeile[i]); //zeile auslesen und in 'zeile' speichern
      memo1.lines.add(zeile[i]); //memo1.text soll JEDE zeile anzeigen. <Sicherheitscheck.
    end;


Wo ist da der fehler?

[edit]
christian S ich habe den code nciht verändert, wollte nur mal dieses array veruschen zu definieren... habs jetzt geändert, und geht ncoh nciht. :(
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mo 18.09.06 23:15 
:oops: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 18.09.06 23:22 
Ich danke allen.

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 18.09.06 23:30 
user profile icon5M17H hat folgendes geschrieben:
Ich danke allen.

ausblenden 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?

Hab mal zwei Sachen in dem Zitat markiert. Könnte es daran liegen oder hast Du Dich nur beim Schreiben des Postings vertan?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 18.09.06 23:31 
Nein.
Ich gebe zeile1 ein und es passier trotzdem nix.
Desswegen ja.