AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi String Table Resource mit langen Texten
Thema durchsuchen
Ansicht
Themen-Optionen

String Table Resource mit langen Texten

Ein Thema von bwolf · begonnen am 2. Sep 2009 · letzter Beitrag vom 8. Sep 2009
Antwort Antwort
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

String Table Resource mit langen Texten

  Alt 2. Sep 2009, 16:05
Hi Leute,

wie eben gefragt, wollte ich wissen, wie ich Texte programmintern ablegen kann.
Nun versuche ich dies mit Resourcen zu lösen, genauer mit einer String Table.

Ich habe mir nun mit dem XN Resource Editor eine RES-File erzeugt die die entsprechenden Texte enthält.
Ein Text hat etwa 500 Zeilen und 15000 Zeichen.

Nun habe ich Probleme diese Texte auszulesen.
Ich habe folgendes Probiert:

Delphi-Quellcode:
procedure Tdm_update.updateDatabase();
var
  a : array[0..20000] of char;
begin
  if LoadString(hInstance, 1, @a, sizeof(a)) <> 0 then
    frm_main.Memo1.Text :=strPas(a);
end

Allerdings kriege ich da nur etwa die ersten 60 Zeilen ausgegeben.
Ich habe auch versucht, statt des Char Arrays einen String bzw PChar zu verwenden, das ergibt allerdings Zeichensalat.

Danke nochmal für eure Hilfe,
gruß b
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: String Table Resource mit langen Texten

  Alt 3. Sep 2009, 15:06
Die Stringtabelle bzw. der Resourcetyp RT_STRING ist meines Wissens in der Größe begrenzt.
Ich würde den Text als benutzerdefinierte Daten RT_RCDATA speichern.

Nicht getestet:
Delphi-Quellcode:
function LiesMeinenText: string;
begin
  with TResourceStream.CreateFromID(HInstance, 1, RT_RCDATA) do
  begin
    try
      SetLength(Result, Size);
      Read(Result[1], Size);
    finally
      Free;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

Re: String Table Resource mit langen Texten

  Alt 3. Sep 2009, 15:32
Eine StringTabelle ist eigentlich nur für kurze und meißt einzeilige Texte gedacht.

Wenn du wirklich sooo große Texte ablegen willst würde ich dir auch empfehlen diese als eigenstendige Resource abzulegen.

PS: LoadString hat einen internen Puffer, mit fester Länge, darum geht da einfach nicht so viel (obwohl mir 60 etwas kurz vorkommt, aber vielleicht liegt dein String ja relativ am Ende ).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#4

Re: String Table Resource mit langen Texten

  Alt 4. Sep 2009, 08:58
Danke für eure Antworten, werde mir das ansehen!

PS:
Kurz zu meinem Vorhaben, vlt. habt ihr dafür ja einen besseren Ansatz:
Wenn es eine neue Programmversion gibt, in der Datenbank-Änderungen notwendig sind, will ich das entsprechende SQL programmintern speichern.
Beim starten der Anwendung wird die DB-Version mit der Programmversion abgeglichen, und falls notwendig entsprechend die Scripts ausgeführt.

Grüße,
B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#5

Re: String Table Resource mit langen Texten

  Alt 4. Sep 2009, 09:43
Da diese Strings eh in der Binary bzw. intern in den Resourcen gespeichert sind, kannst du es doch auch an anderen Stellen dort ablegen?

z.B. als Konstante (Const) oder auch als Resource-Konstante (ResourceString),
wobei letzteres eigentlich auch theoretisch über LoadString geht, aber dort beim Laden des Programs Delphi dieses etwas anders etrstmal in eine Art Cache legt ... es ist dann also sogar etwas flotter, als wenn der String jedesmal erst noch in der Resource gesucht und extrahiert werden müßte.

Diese ResourceStrings liegen ja in Tabellen a bis zu 16 Strings vor und diese Tabellen werden als Ganzes geladen und dann erst daraus der gewünschte String rausgesucht.

die Konstanten kannst du dir ja in eine extra Unit auslagen (ähnlich wie die Unit SysConst von Delphi)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#6

Re: String Table Resource mit langen Texten

  Alt 4. Sep 2009, 10:54
Hi himitsu,

das nervige dabei den Text in einer Constanten zu speichern ist, das ich nach einem
Copy&Paste in die Delphi IDE den kompletten String manuell verbinden muß.
Also jede Zeile in Hochkommas setzen und und mit + verbinden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#7

Re: String Table Resource mit langen Texten

  Alt 4. Sep 2009, 11:23
In einer Resource-Datei (.rc) mußt du ihn aber auch formatieren.
Du könntest jetzt eine TextDatei nehmen

oder eine XML (dort mußt du ja beim Kopieren nur auf < und > achten, es sei denn du nimmst gleich je eine CDATA-Section ... es passiert ja wohl nicht so schnell, daß mal ein ]]> in der Abfrage vorkommt )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#8

Re: String Table Resource mit langen Texten

  Alt 4. Sep 2009, 12:42
Hi himitsu,

Zitat:
In einer Resource-Datei (.rc) mußt du ihn aber auch formatieren.
Das stimmt wohl. Wenn ich allerdings einen Resource-Editor nehme, kann ich auch den formatierten Text einfügen.

Zitat:
Du könntest jetzt eine TextDatei nehmen. oder eine XML...
Würde theoretisch auch gehen, allerdings müßte ich ja diese Files dann dem Programm beilegen, und genau das würde ich gerne verhindern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#9

Re: String Table Resource mit langen Texten

  Alt 4. Sep 2009, 12:48
Zitat von bwolf:
Das stimmt wohl. Wenn ich allerdings einen Resource-Editor nehme, kann ich auch den formatierten Text einfügen.
OK, wenn man das so machen,
alerdings könnte man dafür ja auch einen IDE-Experten nehmen, welcher das dann passend Formatiert

Zitat von bwolf:
Würde theoretisch auch gehen, allerdings müßte ich ja diese Files dann dem Programm beilegen, und genau das würde ich gerne verhindern.
Hier könnte man diese Datei zwar mit in die Anwendung als Resource reinbringen
und z.B. kurz vorm Kompilieren das Resource-Script samt der XML verarbeiten lassen.

Aber dann hätten wir ja wieder eine Resource
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#10

Re: String Table Resource mit langen Texten

  Alt 8. Sep 2009, 09:50
Zitat von himitsu:
alerdings könnte man dafür ja auch einen IDE-Experten nehmen, welcher das dann passend Formatiert
Kennst du (oder sonstwer) einen Expert der das erledigt?
habe bei gockel nichts gefunden, und der GExpert scheint das nicht drauf zu haben...
  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 06:06 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