AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memo-Feld: Zeile und Buchstabe auslesen

Ein Thema von Michelle · begonnen am 12. Feb 2011 · letzter Beitrag vom 14. Feb 2011
Antwort Antwort
Michelle

Registriert seit: 18. Dez 2010
21 Beiträge
 
Delphi 7 Professional
 
#1

Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 16:03
Hallo!

Ich hab da mal ein Problem: Ich habe ein Memo-Feld, aus dem ich den k-ten Buchtaben aus der i-ten Zeile auslesen muss.

Mit Memo1.Lines[i] wähle ich die i-te Zeile an, aber wie bekomme ich dann den Buchstaben? Ich wollte schon die Zeile in einen String machen und dann mit String[k] den Buchstaben auslesen, aber eine Memo-Zeile hat bei mir 800 Buchstaben, dass sprengt jeden Sting (TStringlist hat auch nicht funktioniert). Und Memo1.Lines[i][k] hat mir die Fehlermeldung "Zugriffsverletzung auf Adresse ..." serviert.

An dem "kleinem" Problem scheitert gerade mein ganzes Programm! Für Hilfe wäre ich echt dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 16:21
Lol?
Wieviel RAM hast du?
800 Buchstaben entsprechen 800 Bytes < 1 KB (1024 Bytes)
Ich schätze mal, solange dein RAM > 256mb (Systemanwendung usw eingeschlossen), wirds schon halbswegs in Ordnung sein.
Ansonsten:

Delphi-Quellcode:
var
  i, k: Integer;
  s: String;
begin
{...}
  s := Memo1.Lines[i];
  ShowMessage( s[k] );
{...}
end;
(eh so wie du es beschrieben hast)
Falls weiterhin Fehler auftreten, poste hier die Fehlermeldungen!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 16:23
Mal schnell runtergetippt:
Delphi-Quellcode:
function GetMemoChar(const AMemo: TMemo; const ALine: Integer; const AIndex: Integer): Char;
begin
var
  LineNumber : Integer;
  Line : String;
begin
  Result := #0;
  LineNumber := 10;
  if (Memo1.Lines.Count > LineNumber) then
  begin
    Line := Memo1.Lines[0];
    if (AIndex > 0) and (AIndex <= Length(Line)) then
      Result := Line[AIndex];
  end;
end;
Hinweis: AIndex muss 1 oder größer sein, d.h. das erste Zeichen in einem String wird mit dem Index 1, das zweite mit Index 2 etc. angesprochen.

PS: Strings nehmen beliebig viele Zeichen auf.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Michelle

Registriert seit: 18. Dez 2010
21 Beiträge
 
Delphi 7 Professional
 
#4

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 16:59
Eigentlich habe ich alles so gemacht, wie ihr es schon beschrieben habt:
Code:
 
 {...}
FormLvl.MemoLoad1.Lines.LoadFromFile('{...}');
for i := 1 to 800 do
begin
  t := FormLvl.MemoLoad1.Lines[i];
  for k := 1 to 120 do
    if t[k] = '0' then Area1[i,k] := false else Area1[i,k] := true;
end;
Area1 ist so definiert:
Code:
  Area1 : Array[0..800,  1..120] of Boolean;
Die Fehlermeldung lautet:
"Im Projekt Midby.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 0046B6B6 in Modul 'Midby.exe'. Lesen von Adresse 00000000'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen."
Wenn die Fehlermeldung erscheint ist die Zeile "if t[k] = 0 ... " blau unterlegt.

Ich versteh das nicht, eigentlich müsste das doch richtig sein, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 17:21
Hat Dein Memo 801 Zeilen, hat jede Zeile 120 Zeichen, hast Du die Bereichsprüfung aktiviert.
Delphi-Quellcode:
For i := 0 to Memo1.Lines.Count - 1 do
..
For k := 1 to Length(t) do
..
und dann muß sichergestellt sein daß auf Dein Array nur innerhalb der gültigen Bereich zugegriffen wird....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Michelle

Registriert seit: 18. Dez 2010
21 Beiträge
 
Delphi 7 Professional
 
#6

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 21:08
Wahnsinn, jetzt klappts!! Vielen, vielen Dank, ihr seit super
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 12. Feb 2011, 21:58
Ja, das ist ein häufiges Problem. Einige Felder sind 0 basierend, andere 1 basierend.
Die Memo.Lines sind wie bereits geschrieben 0 basierend und der Index bei einem String 1 basierend.

Deshalb kann man s[length(s)] schreiben, Lines[Lines.Count] aber nicht. Hier muß statt dessen Lines[Lines.Count - 1] hin.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Memo-Feld: Zeile und Buchstabe auslesen

  Alt 14. Feb 2011, 15:19
Trotzdem ist if t[k] = '0then Area1[i,k] := false else Area1[i,k] := true; ein Unding.

Wie wärs mit area1[i,k] := t[k]<>'0' So Riesen boolean arrays kann man im übrigen meistens besser und effizienter durch ein set implementieren:
also set of [1..120] statt array[1..120] of boolean

Geändert von idefix2 (14. Feb 2011 um 15:25 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz