Wie liest man 'List separator' vom Betriebssystem in Java?

8

Ich schreibe ein CSV-Exportprogramm in Java, das die benutzerdefinierten Einstellungen des Benutzers berücksichtigen sollte, insbesondere das "Trennzeichen", das als Trennzeichen verwendet werden soll.

In Windows kann man dieses Listen-Trennzeichen in

setzen %Vor%

Ich weiß nichts über die anderen Betriebssysteme, aber ich bin mir ziemlich sicher, dass Sie das auch auf anderen Betriebssystemen ändern können.

Was ist der beste Weg, um diese benutzerdefinierte Einstellung vom Betriebssystem in Java zu bekommen? Ich bin in einer Eclipse RCP-Umgebung, daher kann ich RCP-bezogene Lösungen verwenden, wenn etwas verfügbar ist.

    
Simon07 08.05.2009, 07:17
quelle

6 Antworten

6

Aus den Kommentaren von diese Antwort :

  

Das Lesen der betriebssystemspezifischen Einstellung muss ich erfüllen.

Was ist, wenn andere Betriebssysteme als Windows keine solche Einstellung haben?

Ich schlage vor, Sie lesen es aus der Registrierung auf Windows (wie erwähnt hier ): Lesen / Schreiben in die Windows-Registrierung mit Java . Auf anderen Plattformen verwenden Sie einfach einen guten Standard, und vielleicht, zumindest unter Unix, unterstützen Sie auch die Konfiguration über eine benutzerdefinierte Umgebungsvariable (die Sie gut dokumentieren): Wie kann mein Java-Code OS-Umgebungsvariablen lesen? .

Mein Bauchgefühl, dass Betriebssysteme universell keine (systemweite oder benutzerspezifische) "Listen-Trennzeichen" -Einstellung haben, ist natürlich falsch, aber ich bezweifle das.

    
Jonik 08.05.2009, 09:54
quelle
6

Ohne auf eine plattformspezifische Lösung zurückzugreifen, denke ich, dass die beste Vorgehensweise darin besteht, Benutzern zu ermöglichen, ihre Präferenz für das Listentrennzeichen in Ihrer eigenen Anwendung anzugeben. Entweder in einem Einstellungsfenster, einem Dialogfeld beim Export oder über ein optionales Befehlszeilenargument.

    
ninesided 08.05.2009 08:03
quelle
5

Zusätzlich zur Bereitstellung einer eigenen Option für den Benutzer in Ihrer Anwendung könnten Sie versuchen, den Listenseparator zu erraten.

Ich habe mir einige Ländereinstellungen in Windows angesehen und festgestellt, dass das Listentrennzeichen entweder ";" oder ",". Ich habe gehört, dass ein anderer Charakter in einem obskuren Gebietsschema ist, aber ich habe es selbst nicht gesehen. Wenn Sie also Ihren Code so gestalten können, dass er sowohl ";" und "," als Listentrennzeichen, dann werden Sie wahrscheinlich die Mehrheit der Fälle abdecken.

Auch wenn "," als Dezimaltrennzeichen verwendet wird, wird "," niemals als Listentrennzeichen verwendet. Ich denke, das ist anders, wenn Zahlen in einer Liste nicht zu unterscheiden sind: 1,2,3,4 könnte 1,2, 3,4 oder 1, 2,3 sein. In diesen Fällen ";" wird als Listentrennzeichen verwendet. Leider ist das Gegenteil nicht der Fall. Arabisch hat "." als Dezimalzeichen und ";" als Listentrennzeichen.

Also denke ich, dass die Regel, die vernünftig befolgt werden kann, ist:

%Vor%     
romeok 29.11.2010 11:45
quelle
2

Aus Neugierde habe ich ein wenig das Thema durchsucht, und tatsächlich scheint Java diesen Begriff nicht aus der Box zu haben.

Die Locales-Demo enthält eine vollständige Liste der Gebietsschemaeinstellungen, und es gibt keine Listentrennzeichen dort.

Ich sah ein forum question bezieht sich auf sun.text.resources-Paket, das privat und veraltet ist. Sie werden nicht viele andere Verweise auf dieses Paket finden, sieht aus wie es lebt in jre / lib / ext / localedata.jar, obwohl meine aktuelle Kopie hauptsächlich asiatische Locales enthält.

Die obigen Ratschläge sind fundiert, oder Sie können eine private Liste pro Gebietsschema recherchieren und verwenden. Ich würde vielleicht auf die ICU-Bibliothek von IBM schauen (C-Sprache, denke ich), die eine recht große Liste von Gebietsschemaeinstellungen zu haben scheint. Nach eine Bemerkung , ICU selbst erhält seine Informationen von einem ISO-Standard, der als primärer Informationsanbieter recherchiert werden sollte.

    
PhiLho 08.05.2009 10:16
quelle
1

Ich hatte das gleiche Problem und fand auch heraus, dass die einzig richtige Lösung darin besteht, dem Benutzer die Möglichkeit zu geben, das "Trennzeichen der Wahl" anzugeben.

Wenn das jedoch nicht möglich ist, wie es in meinem Fall der Fall war, könnte ich die Cross-Locale-Unterstützung am nächsten mit dem Cross-Platform-Support erreichen:

  • Errate die Trennzeichen, die du mit DecimalFormatSymbols verwenden musst
  • Fügen Sie am Anfang der CSV-Datei eine Zeile ein, die beispielsweise "sep =," (ohne Anführungszeichen) enthält. Dies sollte das Listentrennzeichen angeben, das Sie gerade erraten haben

Dies wird zumindest in den meisten Fällen (den Fällen, die ich getestet habe) dazu führen, dass Excel dieses Trennzeichen verwendet, auch wenn Sie "falsch geraten" haben und zumindest ein wenig mehr Kompatibilität bieten.

    
ahlexander 16.12.2015 15:35
quelle
-2

Für Windows ist es in der Registrierung unter:

gespeichert %Vor%

Sie können so etwas verwenden

%Vor%     
darko.topolsek 08.05.2009 07:38
quelle