AGB  ·  Datenschutz  ·  Impressum  







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

Packed Records und Zeichenketten

Ein Thema von Neutral General · begonnen am 9. Jan 2008 · letzter Beitrag vom 9. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:43
Hi,

Ich werde/will/tue packed records übers Netzwerk/Internet verschicken. Der String (bzw. Allgemein: die Zeichenkette) soll in einem Record sein. "Normale" Strings kann ich ja nicht nehmen. Strings mit begrenzter Länge gehn leider auch nicht. Geht das irgendwie mit PChar oder einen Array of Char ? Ich steh grad bisschen auf der Leitung.

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:46
Zitat:
Strings mit begrenzter Länge gehn leider auch nicht
Warum nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:48
Weil: Eventuell lange Texte > 255 Zeichen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:49
Wenn du nur einen string hast, kannst du etwas gemeines tun:
Delphi-Quellcode:
type
  PMeanRecord = ^TMeanRecord;
  TMeanRecord = packed record
    Size: Integer;
    // deine Felder
    Text: array[1..MaxInt] of Char; //(eigentlich 1..Size)
  end;

const
  TMeanRecordMinimumSize = 4; //+Größe deiner Felder
Diesen Record darfst du *nur* über GetMem initialisieren. New oder Variablen des Recordtyps sind absolut verboten:
Delphi-Quellcode:
var
  rec: PMeanRecord;

GetMem(rec, TMeanRecordMinimumSize + stringLength);
Wenn du mehrere Strings brauchst... Nun, Pech gehabt. Dann musst du dir Handler dafür schreiben.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:51
Moin Michael,

Zitat von Neutral General:
Der String (bzw. Allgemein: die Zeichenkette) soll in einem Record sein.
Wenn Du HugeStrings verschicken willst, geht das eh' nur speparat, da sie im Record ja nur als Pointer gespeichert werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:53
Du kannst nehmen:
TextString: String[100];

Zitat von Delphi-Hilfe:
Delphi unterstützt kurze String-Typen (Untertypen von ShortString), deren maximale Länge zwischen 0 und 255 Zeichen liegen kann. Diese Typen werden mit einer Zahl in eckigen Klammern dargestellt, die auf das reservierte Wort string folgt. Beispiel:

var MyString: string[100];
Hier wird die Variable MyString mit einer maximalen Länge von 100 Zeichen erstellt.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:54
Hi Dax,

Brauche nur einen String Und wenn ich das so mache dann brauche ich auch wirklich nur Size(Record ohne String) + Length(String) Bytes? Ich kanns kaum fassen
Ok das es mit New bzw Variablen vom Record selbst nicht geht ist mir jetzt auch klar, weeeiil sonst hätte ich Monsterrecords, die ich sicher verschicken will -.-^^

"145 Bytes runtergeladen von 5.32MB von 'Hallo Welt#0#0[...]#0'"

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 15:56
Das dürfte eher in Richtung 2^31+x Bytes gehen, nicht nur 5,32 MB
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 16:04
Achja... Kann den String nicht genau MaxInt Bytes groß machen...

Zitat:
[Error] Client.pas(24): Data type too large: exceeds 2 GB
(quasi)

Delphi-Quellcode:
x := SizeOf(Record-String);
Text: array[1..MaxInt-x] of Char;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Packed Records und Zeichenketten

  Alt 9. Jan 2008, 16:09
Dann verwende eine sinnvolle Obergrenze wie (1 shl 29), das dürfte sicherlich reichen... Oder du schaltest das Range checking aus und benutzt gleich [0..0].
  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 05:09 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