AGB  ·  Datenschutz  ·  Impressum  







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

200+ Texte in ein memo laden

Ein Thema von Spectre · begonnen am 16. Feb 2013 · letzter Beitrag vom 27. Feb 2013
Antwort Antwort
WInfo

Registriert seit: 3. Jan 2009
36 Beiträge
 
#1

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 09:32
Moin Moin Robin,

denke dein Programm sollte einigermassen robust sein, somit würde ich vor der Verwendung von +200 Textdateien Abstand halten. Wenn Du die Texte nicht direkt in deine App integrieren möchtest und wohl noch weitere Infos dazu kommen, bleiben prinzipiell die folgenden Möglichkeiten über:
  • mitliefern in einer DB (bspw. SQL Lite)
  • über eine Ini Datei
  • Textdatei mit speziellen Trennzeichen (bspw. @@ für neues Land)
  • XML Datei
  • DLL bspw. Ressourcen DLL
  • als Binary (Serialisierung)

Für die Serialisierung noch kurz eine Erläuterung, du brauchst eine Objektstruktur für die Darstellung deiner Länder in deinen Programm. Diese rüstest du dann mit zwei Methoden aus, Save2Stream und ReadFromStream. In die App welche du auslieferst, nimmst du nur die Methode ReadFromStream auf. Dann baust du dir noch ein zweites Prog mit der selben Objektstruktur (eine gemeinsame Codebasis), welches du mit der Pflege der Daten betraust, diese schreibt dann über Save2Stream alle benötigten Daten in eine Datei (kannst binär, als XML, in eine DB oder wie auch immer) ausgeben.

That's all.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 10:20
Ich würde die eine Textdatei wählen. Wobei natürlich eine gewisse Struktur genutzt werden sollte (z.b. xml).

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 10:52
Sagen wir, deine Text-Datei sieht so aus:
Code:
@@Deutschland
Hier ist der
Text
für die
Bundesrepublik
@@England
Und hier für UK
..
Dann liest Du diese Datei in eine TStringList ein...
Delphi-Quellcode:
Var
  MyCountryDescriptions : TStringList;
...

MyCountryDescriptions.LoadFromFile('Laender.TXT');
Einen Beschreibungstext kannst Du so bekommen:
Delphi-Quellcode:
Procedure CopyCountryDescription(Const Country : String; Description : TStrings);
Var
  i : Integer;

Begin
  Description.Clear;
  i:= MyCountryDescriptions.IndexOf('@@'+Country);
  if i=-1 then exit; // Keine Beschreibung gefunden
  inc(i);
  Description.BeginUpdate;
  Try
    while (i<MyCountryDescriptions.Count) do
      if Copy(MyCountrDescriptions[i],1,2) <> '@@then
        break
      else begin
        Description.Add(MyCountrDescriptions[i]);
        inc(i);
      end
  finally
    Description.EndUpdate;
  end
end;
...
// Aufruf z.B. so
  CopyCountryDescription('Deutschland',Memo1.Lines);
Das wäre jetzt für Dich die einfachste Möglichkeit. So kannst Du die Datei auch jederzeit erweitern.
  Mit Zitat antworten Zitat
Spectre

Registriert seit: 29. Jan 2013
Ort: Hamburg
65 Beiträge
 
Delphi XE2 Architect
 
#4

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 14:42
danke für die tipps!!

auch wenn ich die texte ungerne zur verfügung stelle, verstehe ich zuwenig von datenbanken bzw XML um das realistisch zu verwirklichen..
ich dein beispiel eben mal ausprobiert furtbichler, bin mir allerdings nicht sicher wo ich

Code:
MyCountryDescriptions.LoadFromFile('C:\irgendeinpfad\land.TXT');
einfügen muss? egal wo ich es probiere, ich kriege ne exception ("zugriffsverletzung bei adresse ....)
in dem moment wo diese zeile ausgelöst wirdm (ob auf buttondruck oder im formcreate). hast nen tip?

robin
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 14:49
Code:
MyCountryDescriptions.LoadFromFile('C:\irgendeinpfad\land.TXT');
Dann hast du wohl die Stringliste noch nicht erzeugt: MyCountryDescriptions := TStringList.Create;
Und nicht vergessen, die Stringliste am Ende wieder freizugeben: FreeAndNil(MyCountryDescriptions);
  Mit Zitat antworten Zitat
Spectre

Registriert seit: 29. Jan 2013
Ort: Hamburg
65 Beiträge
 
Delphi XE2 Architect
 
#6

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 15:11
gleiches problem :S

hier mal der ganze code. nur ein memo (memo1) und nen button auf der form..pfad ist auch korrekt und das land richtig in der txt benannt nach @@

Code:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    MyCountryDescriptions : TStringList;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
    MyCountryDescriptions : TStringList;


implementation

{$R *.dfm}

Procedure CopyCountryDescription(Const Country : String; Description : TStrings);
Var
  i : Integer;
Begin

  Description.Clear;
  i:= MyCountryDescriptions.IndexOf('@@'+Country);
  if i=-1 then exit; // Keine Beschreibung gefunden
  inc(i);
  Description.BeginUpdate;
  Try
    while (i<MyCountryDescriptions.Count) do
      if Copy(MyCountryDescriptions[i],1,2) <> '@@' then
        break
      else begin
        Description.Add(MyCountryDescriptions[i]);
        inc(i);
      end
  finally
    Description.EndUpdate;
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MyCountryDescriptions := TStringList.Create;
MyCountryDescriptions.LoadFromFile('C:\MeinPfad\land.TXT');
CopyCountryDescription('Deutschland',Memo1.Lines);
FreeAndNil(MyCountryDescriptions);
end;

end.
Hab create, loadfromfile und freigabe dem button übergeben ist das ok?

Geändert von Spectre (17. Feb 2013 um 15:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 15:33
2x verwendet:

Delphi-Quellcode:
  private
    MyCountryDescriptions : TStringList;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
    MyCountryDescriptions : TStringList;

Dadurch dass du die Stringlist ja die ganze Zeit über in Benutzung hast, wie das Programm läuft, ist es vllt besser für dich musst du die Stringlist im Form.OnCreate erzeugen und erst im Form.Close wieder freigeben, da Sie sonst in der Procedure nicht initzialisiert ist.


Edit2:

Enferne die Version aus dem Privat Abschnitt, da sonnst die Procedure:
Procedure CopyCountryDescription(Const Country : String; Description : TStrings); Kein Zugriff auf die Variable hat.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)

Geändert von lbccaleb (17. Feb 2013 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#8

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 15:34
Hallo,

überleg Dir doch mal welche Eigenschaft Du in Button1Click initialisierst und auf welche Variable Du in CopyCountryDescription zugreifst, dann sollte Dir schnell klar werden warum es beim Zugriff auf MyCountryDescriptions.IndexOf('@@'+Country) scheppert.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Spectre

Registriert seit: 29. Jan 2013
Ort: Hamburg
65 Beiträge
 
Delphi XE2 Architect
 
#9

AW: 200+ Texte in ein memo laden

  Alt 27. Feb 2013, 11:44
könnt ihr hier bitte nochmal einen blick draufwerfen? hab nur nen button und ein memo im programm.
ich habe die stringlist deklariert, create ist auch drin, aber es passiert auf knopfdruck....einfach mal gar nichts. die fehlermeldung zumindest ist weg..was mache ich falsch?
land.txt mitsamt @@deutschland und text existiert natürlich.

Code:
var
  Form1: TForm1;
   MyCountryDescriptions : TStringList;


implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeAndNil(MyCountryDescriptions);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyCountryDescriptions := TStringList.Create;
end;

Procedure CopyCountryDescription(Const Country : String; Description : TStrings);
Var
  i : Integer;

Begin

  Description.Clear;
  i:= MyCountryDescriptions.IndexOf('@@'+Country);
  if i=-1 then exit; // Keine Beschreibung gefunden
  inc(i);
  Description.BeginUpdate;
  Try
    while (i<MyCountryDescriptions.Count) do
      if Copy(MyCountryDescriptions[i],1,2) <> '@@' then
        break
      else begin
        Description.Add(MyCountryDescriptions[i]);
        inc(i);
      end
  finally
    Description.EndUpdate;
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
MyCountryDescriptions.LoadFromFile('C:\Games\land.TXT');   //der pfad ist hier richtig plaziert?
CopyCountryDescription('deutschland',Memo1.Lines);
end;

end.
danke!
  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 15:54 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