Thema: Delphi CharFeld/Suchen/Ersetzen

Einzelnen Beitrag anzeigen

Benutzerbild von n00b_on_knees
n00b_on_knees

Registriert seit: 5. Apr 2003
128 Beiträge
 
#1

CharFeld/Suchen/Ersetzen

  Alt 22. Jun 2003, 11:29
Hi Leute...

Ich hab mal so nebenbei an nem Programm gearbeitet, das aus einem StringGrid eben was einlesen soll, und dann als Charelemente in ein Feld speichern soll. Der Benutzer soll ein gesuchtes Element eingeben, das wird dann durchlaufen bis es gefunden wird, und dann alle Elemente ab da sollen mit einem Leerstring gefüllt werden. Aber wie meinem Nickname nach zu urteilen ist, hab ich das wiedermal nicht ohne Fehler geschafft .
Das ganze zeigt einen DebuggerFehler in der Procedure GetMatrix auf, in dem das ganze eingelesen werden soll. Das ganze lässt sich außerdem compilieren, aber wenn ich auf Start drücke und alles vergleichen will funktioniert das natürlich nicht... hier mal der Quellcode:

Delphi-Quellcode:

unit fcharfeld;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, ExtCtrls;

type
    TFeld = array [1..7, 1..14] of char;
  TForm1 = class(TForm)
    Panel1: TPanel;
    gbEingabe: TGroupBox;
    StringGrid1: TStringGrid;
    GroupBox1: TGroupBox;
    edGesucht: TEdit;
    btStart: TButton;
    procedure btStartClick(Sender: TObject);
  private
    function SubMatrix(var A: TFeld; var x, y: integer; var ges: char;
                       s: TStringGrid): boolean;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//***********************************************//
// //
// UP: GetMatrix //
// Zweck: Einlesen der Feldelemente, und //
// nur speichern, wenn sich darin kein //
// Leerstring befindet. //
// //
//***********************************************//
procedure GetMatrix(var a: TFeld; var s: TStringGrid);
//Variablendeklaration
var
  i, j: integer;
begin
  //Vom 1. Zeilenelement bis zum letzten, mache
  for i:= 1 to s.ColCount do
    //Vom 1. Spaltenelement bis zum letzten, mache
    for j:= 1 to s.RowCount do
      //Überprüfe ob sich im Feld etwas befindet,
      if s.Cells[i, j] <> 'then
        //Wenn ja, speichere es ab
        A[i, j]:= Chr(StrToInt(s.Cells[i, j]));
end;

//***********************************************//
// //
// UP: SubMatrix //
// Zweck: Eingegebenes Elemt im Feld suchen, //
// und speichern. //
// //
//***********************************************//
function TForm1.SubMatrix(var A: TFeld; var x, y: integer; var ges: char;
                   s: TStringGrid): boolean;
//Variablendeklaration
var
  i, j: integer;
begin
  result:= false;
  //Einlesen des Gesuchten Elements
  ges:= Chr(StrToInt(edGesucht.Text));
  for i:= 1 to s.ColCount do
    for j:= 1 to s.RowCount do
        if A[i, j] = ges then
          begin
            x:= i;
            y:= j;
            result:= true;
          end
        else
          result:= false;
end;

procedure GetLeer(var A: TFeld; s: TStringGrid; var x, y: integer);
//Variablendeklaration
var
  i, j: integer;
begin
  for i:= (x+1) to s.ColCount do
    for j:= (y+1) to s.RowCount do
      A[i, j]:= #240;
end;


procedure TForm1.btStartClick(Sender: TObject);
//Variablendeklaration
var
  A: TFeld;
  x, y: integer;
  ges: char;
  s: TStringGrid;
  isGefunden: boolean;
begin
  GetMatrix(A, s);
  SubMatrix(A, x, y, ges, s);
  if isGefunden = True then
    ShowMessage('Der gesuchte Text befindet sich in der ' + IntToStr(x) +
    '. Reihe und ' + IntToStr(y) + '. Spalte.')
  else
    ShowMessage('Der gesuchte Text konnte nirgends gefunden werden!');
end;

end.
Ich hoffe ihr könnt mir sagen was diesen groben Fehler heraufbeschwört, und falls es sonst noch etwas gibt was nicht funktionieren könnte, bitte ich mir das mitzuteilen!
Danke im Vorraus,
mfg noob_on_knees
Against TCPA & And I think we should live our dreams
  Mit Zitat antworten Zitat