====== std.country ======
Vollständige ISO 3166-1-Länderdatenbank mit 249 Einträgen. Bidirektionale Suche nach ISO-Alpha-2-Code (z.B. ''DE'', ''FR'') und Ländername, Zuordnung von Währungscode und Region (8 Regionen: Europa, Asien, Afrika, Nord-/Südamerika, Ozeanien, Naher Osten, Karibik) sowie numerischem ISO-Code.
Einsatzbereiche: Abhängigkeit von ''std.validate.vat'', ''std.validate.iban'' und ''std.net.whois''; Internationalisierung, E-Commerce-Adressvalidierung, geografische Datenauswertung.
**Autor:** Andreas Röne\\
**Copyright:** 2024-2025 Andreas Röne
----
===== Konstanten =====
^ Name ^ Typ ^ Wert ^ Sichtbarkeit ^
| ''COUNTRY_COUNT'' | ''int64'' | ''249'' | pub |
| ''REGION_EUROPE'' | ''int64'' | ''1'' | pub |
| ''REGION_ASIA'' | ''int64'' | ''2'' | pub |
| ''REGION_AFRICA'' | ''int64'' | ''3'' | pub |
| ''REGION_NORTH_AMERICA'' | ''int64'' | ''4'' | pub |
| ''REGION_SOUTH_AMERICA'' | ''int64'' | ''5'' | pub |
| ''REGION_OCEANIA'' | ''int64'' | ''6'' | pub |
| ''REGION_MIDDLE_EAST'' | ''int64'' | ''7'' | pub |
| ''REGION_CARIBBEAN'' | ''int64'' | ''8'' | pub |
----
===== Typen =====
==== CountryEntry (struct) ====
^ Feld ^ Typ ^ Bedeutung ^
| ''code'' | ''int64'' | Zeiger auf den zweibuchstabigen Alpha-2-Code |
| ''name'' | ''int64'' | Zeiger auf den Ländernamen |
| ''currency'' | ''int64'' | Zeiger auf den dreibuchstabigen Währungscode |
| ''region'' | ''int64'' | eine der ''REGION_*''-Konstanten |
| ''numeric'' | ''int64'' | numerischer ISO-3166-1-Code |
----
===== Funktionen =====
^ Signatur ^ Sichtbarkeit ^ Beschreibung ^
| ''CountryInitDb(): int64'' | pub | Initialisiert die Länderdatenbank im Speicher — vor der ersten Abfrage aufrufen |
| ''CountryStrEqual(s1: int64, s2: int64): int64'' | pub | Vergleicht zwei Länder-Strings auf Gleichheit |
| ''CountryGetName(code: pchar): pchar'' | pub | Liefert Ländername zu Alpha-2-Code |
| ''CountryGetCode(name: pchar): pchar'' | pub | Liefert Alpha-2-Code zu Ländername |
| ''CountryGetCurrency(code: pchar): pchar'' | pub | Liefert Währungscode zu Alpha-2-Code |
| ''CountryGetRegion(code: pchar): int64'' | pub | Liefert Regions-ID zu Alpha-2-Code |
| ''CountryGetNumeric(code: pchar): int64'' | pub | Liefert numerischen ISO-Code des Landes |
| ''CountryGetRegionName(region: int64): pchar'' | pub | Liefert Regionsname zur Regions-ID |
| ''CountryIsValid(code: pchar): int64'' | pub | Prüft ob Alpha-2-Code gültig ist |
| ''CountryGetCount(): int64'' | pub | Zahl der Einträge (249) |
| ''CountryGetCount(): int64'' | pub | Gibt Anzahl der Ländereinträge zurück |
----
===== Beispiel =====
unit main;
import std.io;
import std.string;
import std.country;
fn main(): int64 {
CountryInitDb();
Print("CountryGetCount : "); PrintLn(IntToStr(CountryGetCount()));
Print("DE -> "); Print(CountryGetName("DE"c)); Print(" / ");
Print(CountryGetCurrency("DE"c)); Print(" / ");
Print(CountryGetRegionName(CountryGetRegion("DE"c))); Print(" / ");
PrintLn(IntToStr(CountryGetNumeric("DE"c)));
Print("Japan -> "); PrintLn(CountryGetCode("Japan"c));
Print("CountryIsValid(XX) : "); PrintLn(IntToStr(CountryIsValid("XX"c)));
return 0;
}
CountryGetCount : 249
DE -> Germany / EUR / Europe / 276
Japan -> JP
CountryIsValid(XX) : 0
Namen, Regionsnamen und Währungscodes sind **englisch**; Name und numerischer Code stammen aus ISO 3166-1 (''/usr/share/iso-codes'').
**Bis lyxc 1.1.1C stürzte jede Abfrage ab** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1604|#1604]]): die Tabelle wurde mit ''poke8''/''peek8'' auf Acht-Byte-Feldern befüllt und gelesen, von jeder Zeichenketten-Adresse blieb das niederwertigste Byte übrig. Außerdem enthielt sie nur 67 der 249 Einträge. Beides ist behoben — wer eine ältere Fassung einsetzt, prüft das mit ''CountryGetCount()''.
Letzte Aktualisierung: 2026-08-18 — Signaturen auf ''pchar'' berichtigt, ''CountryGetCount'' und die Struct-Felder ergänzt, lauffähiges Beispiel mit echter Ausgabe ([[https://github.com/SEOLizer/LyX-Compiler/issues/1604|#1604]]).