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 17. Feb 2013 · letzter Beitrag vom 27. Feb 2013
Antwort Antwort
Seite 1 von 3  1 23      
Spectre

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

200+ Texte in ein memo laden

  Alt 17. Feb 2013, 00:11
Hallo!

Ich code ein geographielernprogramm.
Ich möchte wenn ein jeweiliges land auf der karte angewählt ist, den dazugehörigen text (hauptstadt, länderspezifische informationen etc) in einem memo anzeigen. die texte zu jedem land hab ich schon in über 200 txt dateien abgespeichert...

wenn ich nicht 200+ memos erstellen will und die txt dateien dem user nicht zur verfügung stellen will( via loadfromfile) wie binde ich diese ein? wenn ich nicht recht irre nutzt eine .res file auch nur quellen oder?
am liebsten wäre es mir, ich könnte alle 200 texte in eine dll laden und auf diese zugreifen, dann müsste ich nur die exe und die dll bereitstellen, lässt sich das machen?
wenn ja ne idee wie?


bin für alle vorschläge offen, wie würdet ihr das problem lösen haufenweise texte in nur einem memo darzustellen?

dank!!

lg aus hamburg
robin
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 00:23
Wenn du alle benötigten Dateien zipst, mußt du nur ein Zip-File übergeben ...

Was spricht dagegen, mit Text-Dateien zu arbeiten? Du benennst die Textdateien nach dem Land (z.B. Deutschland.txt) und lädst die nach Bedarf mit LoadFromFile in dein Memo.

Du könntest aber auch eine Datenbank einsetzen, wenn du nicht willst, daß der Anwender die Texte manipulieren kann. Eine DLL zu verwenden halte ich für unnötig und zudem für zu kompliziert, vor allem, wenn du Korrekturen an den Texten vornehmen mußt.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 07:36
Mein Vorschlag wäre hier eine Datenbank (z.B. SQLite) zu nehmen, wie mein Vorredner es schon vorgeschlagen hat oder die Texte in eine Resources packen und dann die Resources entweder ins Programm oder doch in eine DLL. So brauchst Du bei der Resources nur die DLL oder die EXE auszutauschen, wenn Du Änderungen vornimmst.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 09:13
Hi,

der Weg über Datenbank ist sicher der bessere.
Aber es ist auch relativ easy mit einer DLL machbar.

Eine Datei z.B. laender.rc

dort für jede Textdatei eine Zeile: TEXT_DE RCDATA "deutschland.txt"

Eine dpr:
Delphi-Quellcode:
library land_data;
{$R *.res}
begin
end.
kompilieren:
brcc32.exe laender.rc
dcc32 land_data.dpr

In den Sourcen:

Delphi-Quellcode:
procedure DeinForm.LadeMemo(ABlockName: string);
Var
  AStream: TResourceStream;
  AHandle: THandle;
  ADllFileName: string;
begin
  ADllFileName := 'land_data.dll';
  AHandle := LoadLibraryEx(PChar(ADllFileName), 0, LOAD_LIBRARY_AS_DATAFILE);
  if AHandle > HINSTANCE_ERROR then
  begin
    try
      AStream := TResourceStream.Create(AHandle, ABlockName, RT_RCDATA);
      try
        if AStream.Size > 0 then
        begin
          AStream.Position := 0;
          DeinMemo.LoadFromStream(AStrem);
        end;
      finally
        AStream.Free;
      end;
    finally
      FreeLibrary(AHandle);
    end;
  end
  else
    //
    { TODO : Fehlerausgabe }
end;
Aufruf z.B.
LadeMemo('TEXT_DE');

Alles ungetestet...


Frank
Frank Reim

Geändert von dataspider (17. Feb 2013 um 09:16 Uhr)
  Mit Zitat antworten Zitat
WInfo

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

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 10: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
 
#6

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 11: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
 
#7

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 11: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
 
#8

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 15: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
 
#9

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 15: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
 
#10

AW: 200+ Texte in ein memo laden

  Alt 17. Feb 2013, 16: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 16:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:52 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