Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Probleme mit tStrings und Strings im Memofeld (https://www.delphipraxis.net/86124-probleme-mit-tstrings-und-strings-im-memofeld.html)

chrizke 9. Feb 2007 13:03


Probleme mit tStrings und Strings im Memofeld
 
Hi,

ich habe ein Memofeld, welches mit Text gefüllt ist.
Nun muss ich Zeile für Zeile auslesen und bearbeiten.
Ich habe zum Bearbeiten eine Funktion geschrieben die ein Array vom Typ String als Result ausgibt. Das ist auch nicht das Problem.

Das Problem ist, dass wenn ich mit MEMOFELD.lines.strings[i] in einer for-Schleife jede Zeile einlese und in die Funktion übergebe, Delphi6 meckert, dass die Typen (tsring und string) nicht übereinstimmen.

Kann mir jemand sagen, wie ich dieses Problem umgehe???



chrizke

Fussel_Scampi 9. Feb 2007 13:07

Re: Probleme mit tStrings und Strings im Memofeld
 
Ich hab genau das selbe problem^^

marabu 9. Feb 2007 13:10

Re: Probleme mit tStrings und Strings im Memofeld
 
Herzlich willkommen in der Delphi-PRAXiS, ihr beiden.

Ihr müsst ein wenig Code zeigen - und die Variablen-Definitionen wo nötig.

Freundliche Grüße vom marabu

MrKnogge 9. Feb 2007 13:10

Re: Probleme mit tStrings und Strings im Memofeld
 
Moin und herzlich Willkommen in der DP,

Delphi-Quellcode:
MEMOFELD.lines.strings[i]
gibt dir ein String zurück, du versuchst ihn wahrscheinlich als TStrings zu behandeln. Poste mal bitte deinen Code.

Gruß

PS:

Zitat:

Zitat von chrizke
die ein Array vom Typ String als Result

Statt ein Array vom Typ String sollte man lieber den Typ Strings zurückgeben.

Jürgen Thomas 9. Feb 2007 13:11

Re: Probleme mit tStrings und Strings im Memofeld
 
Ich sehe nicht, wo das Problem liegen sollte. Lines ist vom Typ TStrings. Mit Memo1.Lines[i] bekommst Du jede einzelne Zeile; mit TStrings (also einer "Kopie" von Memo1.Lines) könntest Du mindestens genauso gut arbeiten wie mit einem Array; und es gibt genügend Funktionen zum Kopieren; z.B.:
Delphi-Quellcode:
Kopie.Add(Memo1.Lines[i]);
Kopie.AddStrings(Memo1.Lines);
Vielleicht kannst Du genauer angeben, bei welcher Zuordnung die inkompatiblen Typen bemängelt werden.

Gruß Jürgen

chrizke 9. Feb 2007 13:15

Re: Probleme mit tStrings und Strings im Memofeld
 
also hier ist die Zeile die den Fehler:
Delphi-Quellcode:
     Zeile := mAnzeige.lines.strings[i];
     Zeilenarray:=Split(Zeile, ';');
So Split ist wie folgt deklariert:

Der Interface Teil:
Delphi-Quellcode:
type
  TStringArray = array of String;

  function Split(strring, trennzeichen: String): TStringArray;
Der Implementation Teil:
Delphi-Quellcode:
function Split(strring, trennzeichen: String): TStringArray;
var
  I, L: Integer;
begin
  SetLength(Result, 0);
  if strring = '' then
    Exit;
  I := Pos(trennzeichen, strring);
  L := Length(trennzeichen);
  while I > 0 do
  begin
    Result[High(Result)] := copy (strring,1,I-1);
    delete(strring,1,I);
  end;
Ich brauche das Array als Result, nur nen String bringt nichts!

Klaus01 9. Feb 2007 13:22

Re: Probleme mit tStrings und Strings im Memofeld
 
Wie hast Du denn "Zeilenarray" deklariert.

Grüße
Klaus

marabu 9. Feb 2007 13:23

Re: Probleme mit tStrings und Strings im Memofeld
 
Vielleicht solltest du dich zuerst mal um deine Split-Funktion kümmern - da liegt einiges im Argen. Deine Schleife steuerst du mit I, aber I wird in der Schleife nicht angepasst.

Der Zugriff auf die einzelnen Zeilen des Memos kann auch über Memo.Lines[i] erfolgen und du kannst den String auch sofort an deine Splitfunktion übergeben - ein Umspeichern ist nicht nötig.

Freundliche Grüße

chrizke 9. Feb 2007 13:26

Re: Probleme mit tStrings und Strings im Memofeld
 
zeilenarray wird wie folgt deklariert:

Delphi-Quellcode:
zeilenarray:array of String;

Es geht mir im Moment nur um das Typenproblem und nicht um die Funktion, dass da noch teile nicht ganz ausgereift sind ist mir klar.

Gruber_Hans_12345 9. Feb 2007 13:29

Re: Probleme mit tStrings und Strings im Memofeld
 
wie ist zeile (sollte ein normaler string sein) deklariert?


Zitat:

Zitat von chrizke
also hier ist die Zeile die den Fehler:
Delphi-Quellcode:
     Zeile := mAnzeige.lines.strings[i];
     Zeilenarray:=Split(Zeile, ';');

und in welcher zeile nun genau?

poste eventuell aml den ganzen source code

chrizke 9. Feb 2007 13:32

Re: Probleme mit tStrings und Strings im Memofeld
 
Ok, hier der ganze code:

Delphi-Quellcode:
procedure TfMain.btEinlesenClick(Sender: TObject);
var i, Code, aNr, aJahr:integer;
    Zeile,testt, aSachgebiet, aAutor, aTitel, aOrt, aVerlag : String;
    neu : tBuch;
    zeilenarray:array of String;
begin
  mAnzeige.Lines.LoadFromFile('Buecher.txt');
  Anzahl := mAnzeige.Lines.Count;
  Buchliste := tListe.create;
  for i := 0 to Anzahl-1 do begin
     Zeilenarray:=Split(mAnzeige.lines[i], ';');
  end;
Alles was noch danach in der procedure kommt, ist irrelevant und hat nichts mit dem Problem zu tun, das ich habe.

marabu 9. Feb 2007 13:34

Re: Probleme mit tStrings und Strings im Memofeld
 
TStringArray und array of String sind nicht kompatibel - du solltest deine Variablendeklaration anpassen...

chrizke 9. Feb 2007 13:36

Re: Probleme mit tStrings und Strings im Memofeld
 
Ja und wie mache ich das??? Das ist ja schon die ganze Zeit mein Problem gewesen...

Gruber_Hans_12345 9. Feb 2007 13:36

Re: Probleme mit tStrings und Strings im Memofeld
 
deklariere zeilenarray auch als TStringArray

Delphi-Quellcode:
procedure TfMain.btEinlesenClick(Sender: TObject);
var i, Code, aNr, aJahr:integer;
    Zeile,testt, aSachgebiet, aAutor, aTitel, aOrt, aVerlag : String;
    neu : tBuch;
    zeilenarray:TStringArray;
begin
  mAnzeige.Lines.LoadFromFile('Buecher.txt');
  Anzahl := mAnzeige.Lines.Count;
  Buchliste := tListe.create;
  for i := 0 to Anzahl-1 do begin
     Zeilenarray:=Split(mAnzeige.lines[i], ';');
  end;

Klaus01 9. Feb 2007 13:38

Re: Probleme mit tStrings und Strings im Memofeld
 
und dann vielleicht noch in der Split Prozedur die Länge des StringArrays anpassen.
Denn:
Delphi-Quellcode:
 Dynamic arrays of length 0 have the value nil.
Grüße
Klaus

chrizke 10. Feb 2007 13:04

Re: Probleme mit tStrings und Strings im Memofeld
 
Ok, ich habe jetzt die Deklaration geändert, nun gibt mir Delphi aber andauernd einen EAccessViolation Error aus...
Was hat das denn schon wieder zu bedeuten????

EDIT: Ah hat sich schon erledigt. Ich hab nur auf ne Variable zugegriffen die ich schon gelöscht hatte. Funzt jetzt, vielen Dank!!!!

everdream 14. Mär 2007 21:22

Re: Probleme mit tStrings und Strings im Memofeld
 
hallo, ich habe ein ganz ähnliches problem:

ich muss ab und an mal die elemente in einer combobox (delphi2005, falls das wichtig is) ändern. dazu muss ja dann TStrings benutzt werden.
ich müsste den text nur einmalig speichern, aber nach meinen kenntnissen kann ich das nur als string,

Beispiel:
Delphi-Quellcode:
ComboBox1.items:='blabla';

// is klar, kommt dann das: [Error] Unit2.pas(172): E2010 Incompatible types: 'TStrings' and 'string'
ich muss also nur wissen, wie ich 'blabla' als bzw in TStrings schreiben kann... da müssen dann natürlich mehrere items rein!
naja, vllt versteht mich wer :cyclops:


lg, max

himitsu 14. Mär 2007 22:16

Re: Probleme mit tStrings und Strings im Memofeld
 
gib mal 'nen Prunkt nach items ein und warte etwas :zwinker:

oder Delphi-Referenz durchsuchenTStringList

Delphi-Quellcode:
ComboBox1.items.Add('blabla');

everdream 14. Mär 2007 22:24

Re: Probleme mit tStrings und Strings im Memofeld
 
:pale: dass ich dafür euer forum vollspammen musste tut mir leid!

aber danke!! :wall: :wall: :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz