Mehrere Strings in Array - Zuweisung vereinfachen?

Rund um die LCL und andere Komponenten
Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Timm Thaler »

Ich möchte den "DefaultFormatSettings" eigene deutschsprachige Bezeichner zuweisen, da die auf dem Raspberry fehlen.

Bisheriges Vorgehen:

Code: Alles auswählen

  with DefaultFormatSettings do begin
    ShortDayNames[1] := 'So'; ShortDayNames[2] := 'Mo'; ShortDayNames[3] := 'Di'; ShortDayNames[4] := 'Mi';
    ShortDayNames[5] := 'Do'; ShortDayNames[6] := 'Fr'; ShortDayNames[7] := 'Sa';
  // ebenso für LongDayNames, ShortMonthNames, LongMonthNames...
  end;


Kann man das auch kürzer fassen? Etwa in der Art:

Code: Alles auswählen

  with DefaultFormatSettings do begin
    ShortDayNames[1..7] := ('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa')// <= was so nicht geht
  end;


Konstantenzuweisung geht nicht, weil DefaultFormatSettings ja schon definiert ist. Ich möchte erreichen, dass bei Date und Time deutsche Angaben rauskommen.

jacade
Beiträge: 4
Registriert: Sa 29. Okt 2016, 11:57
OS, Lazarus, FPC: Debian 8 (L 1.6 FPC 3.0.0)
CPU-Target: 64bit

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von jacade »

So was funktioniert bei mir:

Code: Alles auswählen

const
  DeutscheTage: TWeekNameArray = ('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');
 
...
 
DefaultFormatSettings.ShortDayNames := DeutscheTage;


Wäre das was für dich?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Socke »

Timm Thaler hat geschrieben:Ich möchte den "DefaultFormatSettings" eigene deutschsprachige Bezeichner zuweisen, da die auf dem Raspberry fehlen.

Wenn du die Unit clocale in deinem Programmstart einfügst, werden diese über die c-Standardbibliothek entsprechend der Benutzereinstellungen (Umgebungsvariablen) automatisch gesetzt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Timm Thaler »

Socke hat geschrieben:Wenn du die Unit clocale in deinem Programmstart einfügst, werden diese über die c-Standardbibliothek entsprechend der Benutzereinstellungen (Umgebungsvariablen) automatisch gesetzt.


Gerade probiert: Das ist - relativ - neu. Vor nem Jahr ging das auf dem Raspberry noch nicht, soweit ich mich erinnere.

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Mathias »

Das man so bequem an Wochentage kommt, hätte ich nicht gedacht.

Ich habe es gerade probiert, aber dort fängt die Woche komischerweise mit Sonntag an, ich dachte immer, die Woche beginnt am Montag. :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Socke »

Mathias hat geschrieben:Ich habe es gerade probiert, aber dort fängt die Woche komischerweise mit Sonntag an, ich dachte immer, die Woche beginnt am Montag. :roll:

Das ist einfach eine "ältere" Zeiteinteilung; siehe auch den Wikipedia-Eintrag zu "Woche"
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von wp_xyz »

Montag oder Sonntag, je nachdem, wo man ist: https://de.wikipedia.org/wiki/Woche

Seltsamerweise scheint die DateUtils-Funktion StartOfTheWeek für alle Länder den Montag als Wochenbeginn anzusetzen. In den folgenden Codestellen aus DateUtils and SysUtils gibt es keinen Bezug auf irgendeine landestypische Einstellungen:

Code: Alles auswählen

Function StartOfTheWeek(const AValue: TDateTime): TDateTime;
begin
  Result:=Trunc(AValue)-DayOfTheWeek(AValue)+1;
end;
 
const
  DOWMap: array [1..7] of Word = (7, 1, 2, 3, 4, 5, 6);
 
Function DayOfTheWeek(const AValue: TDateTime): Word;
begin
  Result:=DowMAP[DayOfWeek(AValue)];
end;
 
function DayOfWeek(DateTime: TDateTime): integer;
begin
  Result := 1 + ((Trunc(DateTime) - 1) mod 7);
  If (Result<=0) then
    Inc(Result,7);
end;

Mathias
Beiträge: 6143
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Mathias »

Montag oder Sonntag, je nachdem, wo man ist: https://de.wikipedia.org/wiki/Woche
Ich dachte immer dies sei weltweit. :oops:

TWeekNameArray ist wieder mal so eine gefährliche Array, welche nicht bei 0 sondern bei 1 anfängt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von sstvmaster »

wieso fängt dann bei DOWMap das Array aber bei 7 (Sonntag) an?

Code: Alles auswählen

const
  DOWMap: array [1..7] of Word = (7, 1, 2, 3, 4, 5, 6);
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von wp_xyz »

Denksportaufgabe...

Ich denke, bei DayOfWeek beginnt die Woche am Sonntag, bei DayOfTheWeek am Montag (http://www.delphibasics.co.uk/RTL.asp?Name=dayofweek). Da man für beide Funktionen dieselben Tagesnummern benutzen will, muss man eine um 1 verschobene Übersetzungstabelle zwischen beiden Index-Welten verwenden.

Lt Docs ((https://www.freepascal.org/docs-html/rt ... eweek.html)) ist DayOfTheWeek die Anzahl der Tage, die an dem angegebenen Datum seit dem Wochenbeginn vergangen sind. Daher kann man sich die DOWMap-Tabelle auch so erklären: Der Sonntag (1. Platz im DOWMap, denn hier findet man in den "FormatSettings.LongDayNames[1] den 'Sonntag') ) ist der letzte (= 7.) Tag der "Montagswoche", daher ist ihm der Wert 7 zugeordnet. Der Montag (2. Platz im DOWMap) ist der 1. Tag der Montagswoche, daher hat er den Wert 1, usw.
Zuletzt geändert von wp_xyz am Sa 18. Aug 2018, 16:25, insgesamt 1-mal geändert.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Timm Thaler »

Socke hat geschrieben:Wenn du die Unit clocale in deinem Programmstart einfügst, werden diese über die c-Standardbibliothek entsprechend der Benutzereinstellungen (Umgebungsvariablen) automatisch gesetzt.


Ups, gerade damit auf die Fresse geflogen: Clocale liefert bei Programmen über die Kommandozeile und bei Programmen die per cron gestartet werden die richtigen deutschen Monatsnamen. Bei CGIs die in var/www/html liegen liefert es allerdings die englischen Namen aus. Hatte also doch einen Grund, warum das nicht ging.

Und dabei dreht es noch die Datumsschreibweise von dd:mm:jj auf mm:dd:jj, so dass meine Zeitstempel aus der csv falsch interpretiert werden. Das war vorher nicht so.

Also doch von Hand. Wenn man nicht alles selber macht... ;-)

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Mehrere Strings in Array - Zuweisung vereinfachen?

Beitrag von Socke »

Timm Thaler hat geschrieben:Ups, gerade damit auf die Fresse geflogen: Clocale liefert bei Programmen über die Kommandozeile und bei Programmen die per cron gestartet werden die richtigen deutschen Monatsnamen. Bei CGIs die in var/www/html liegen liefert es allerdings die englischen Namen aus. Hatte also doch einen Grund, warum das nicht ging.

Wie werden denn bei CGI die Umgebungsvariable LANG gesetzt? Hier werden i.d.R. nicht einfach Umgebungsvariablen von irgendeinem Benutzer übernommen sondern der Webserver kontrolliert diese sehr genau. Ggf. musst du also in der Webserver-Konfiguration nacharbeiten.
Größere Webanwendungen mit eigener Lokalisierung sollten sowieso die Einstellungen des Clients übernehmen; da hilft die Unit clocale nur bedingt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten