Mehrere Strings in Array - Zuweisung vereinfachen?

Rund um die LCL und andere Komponenten

Mehrere Strings in Array - Zuweisung vereinfachen?

Beitragvon Timm Thaler » 15. Aug 2018, 00:52 Mehrere Strings in Array - Zuweisung vereinfachen?

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.
Timm Thaler
 
Beiträge: 707
Registriert: 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
Nach oben

Beitragvon jacade » 15. Aug 2018, 07:14 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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?
jacade
 
Beiträge: 4
Registriert: 29. Okt 2016, 10:57
OS, Lazarus, FPC: Debian 8 (L 1.6 FPC 3.0.0) | 
CPU-Target: 64bit
Nach oben

Beitragvon Socke » 15. Aug 2018, 09:42 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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
Socke
 
Beiträge: 2546
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Timm Thaler » 15. Aug 2018, 10:59 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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.
Timm Thaler
 
Beiträge: 707
Registriert: 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
Nach oben

Beitragvon Mathias » 15. Aug 2018, 16:04 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 15. Aug 2018, 16:30 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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
Socke
 
Beiträge: 2546
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon wp_xyz » 15. Aug 2018, 16:54 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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;
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 15. Aug 2018, 19:10 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon sstvmaster » 15. Aug 2018, 19:21 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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);
OS: Windows 7 32/64bit
Lazarus 1.8.4, 32bit
Lazarus 2.1.0 Trunk 3.3.1, 32bit
sstvmaster
 
Beiträge: 84
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 1.8.4 + 2.1.0 Trunk 3.3.1 / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon wp_xyz » 15. Aug 2018, 21:48 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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 18. Aug 2018, 15:25, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

Beitragvon Timm Thaler » 18. Aug 2018, 15:06 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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... ;-)
Timm Thaler
 
Beiträge: 707
Registriert: 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
Nach oben

Beitragvon Socke » 18. Aug 2018, 19:26 Re: Mehrere Strings in Array - Zuweisung vereinfachen?

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
Socke
 
Beiträge: 2546
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried