AGB  ·  Datenschutz  ·  Impressum  







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

String in Record Struktur

Ein Thema von zeras · begonnen am 17. Sep 2011 · letzter Beitrag vom 18. Sep 2011
Antwort Antwort
Seite 1 von 2  1 2      
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#1

String in Record Struktur

  Alt 17. Sep 2011, 14:37
Delphi-Version: 2009
Hallo

Gibt es eine Möglichkeit, einen String, der länger als 255 Zeichen ist, in einen Record zu packen und diesen dann in einer Datei zu sichern neben anderen Werten im Record (Bool, Integer etc.)?
Wenn ich Strings mit Größenangabe nutze, dann geht das, aber wenn ich nur als String definiere, wird nur der Pointer abgespeichert.
OK, ich könnte auch eine XML Datei nutzen, wollte das aber vermeiden.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: String in Record Struktur

  Alt 17. Sep 2011, 14:41
Definiere den string doch als Array of ...
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.356 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: String in Record Struktur

  Alt 17. Sep 2011, 14:43
Schreib einfach LoadFromStream und SaveToStream Methoden, dann musst du nicht mit unflexiblen Records in der Datei arbeiten:
http://www.delphi-forum.de/viewtopic...=645319#645319
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: String in Record Struktur

  Alt 17. Sep 2011, 15:27
ein Array[...] of Char und dazu einen Property als String, welcher auf diesen Array weiterleitet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#5

AW: String in Record Struktur

  Alt 17. Sep 2011, 15:42
Danke für die Antworten.

Werde mal sehen, welche ich umsetzen kann.

Gruß

Matthias
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#6

AW: String in Record Struktur

  Alt 17. Sep 2011, 18:28
Im enteffekt willst du ja einen String speichern der größer 255 Zeichen ist (vllt sogar variable.
Mach doch im Record eine Integer-Variable von der Länge. und dan schreibst du den String direkt rein.
Das geht mit  Stream.Write(String[1],Länge); Also im record die länge des strings speichern und dann den String schreiben. Beim lesen erst record lesen und dann musst du den Speicher zum lesen in eine String-variable festlegen.

Hier eine kurze Funktion zum Prinzip.
Die länge ist halt den im record den du erst liesst.

Delphi-Quellcode:
//Schreiben
fs := TFileStream.Create(....,....);
  try
    // Erst die Länge
    fs.Write(dwLen,SizeOf(dwLen)); // Besser SizeOf als direkt 4, falls man den Typ ändert
    // Dann den eigentlichen Inhalt
    fs.Write(sBuf[1],dwLen);
  finally
    fs.Free;
  end;
  // Lesen
  fs := TFileStream.Create(....,....);
  try
    // Erst die Länge
    fs.Read(dwLen,SizeOf(dwLen));
    // Jetzt muss erst mal der Lesebuffer initialisiert werden
    sBuf := StringOfChar(#00,dwLen); // oder SetLength(sBuf,dwLen), aber dann ist der Speicher nicht initalisiert
    fs.Read(sBuf[1],dwLen);
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#7

AW: String in Record Struktur

  Alt 17. Sep 2011, 19:09
Im enteffekt willst du ja einen String speichern der größer 255 Zeichen ist (vllt sogar variable.
Mach doch im Record eine Integer-Variable von der Länge. und dan schreibst du den String direkt rein.
Danke für den Tipp. Ich finde diese Lösung sehr gut, und habe schon das Speichern eingebaut.
Das Auslesen kommt morgen dran.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: String in Record Struktur

  Alt 17. Sep 2011, 19:32
Ist zwar leicht OT aber trotzdem

Ohne beurteilen zu können ob die Records für das Projekt zwingend erforderlich sind, wäre mein Vorschlag im Bezug auf das Speichern und Laden - und auch den Zugriff via GUI - auch mal über ein TClientDataSet nachzudenken, ob das nicht viel besser passen würde als das Konstrukt mit den Records.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.356 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: String in Record Struktur

  Alt 18. Sep 2011, 02:01
Mach doch im Record eine Integer-Variable von der Länge. und dan schreibst du den String direkt rein.
Das geht mit  Stream.Write(String[1],Länge);
Warum ein zusätzliches Feld im Record? Warum nicht wie ich oben unter dem Link geschrieben habe alles gekapselt?
Das halte ich für die sinnvollere Lösung.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: String in Record Struktur

  Alt 18. Sep 2011, 03:28
Zumal Delphi-Strings ihre Länge doch eh schon mit sich tragen - wenn wir schon bei der "ToFile()"-Record-Methode sind. Length(MyString) ist letztlich nichts anderes als "PInteger(@MyString[1]-4)^", womit der Längen-Integer implizit ohnehin schon immer vorm String steht. Und zudem via Sprachfeature "Length()" hübsch auswertbar
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:00 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