unix2dos

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Mahlzeit,

ist es möglich, das ich beim erstellen einer Datei angeben kann, ob diese Datei im Unix- oder Windows-Format
abgespeichert wird. oder kann ich den Dateiinhalt schon vorher so anpassen, dass ich es im Windows-Format
abspeichern kann?
 

Duster

Aktives Mitglied
Na das Problem ist folgendes :

Es wird in einer JTextArea ein Text geschrieben, diesen Text speichere ich dann per MausKlick in
einer Textdatei ab, wenn ich nun die Datei unter Windows (Notepad) öffne zeigt er mir den
gesamten Inhalt in einer Zeile an.

Wenn ich aber die selbe Datei unter Unix öffne, zeigt er sie mir so an, wie sie auch in der
JTextArea geschrieben wurde.

Ich kann nur sagen, das der Zeilenumbruch von den Systemen unterschiedlich interpretiert wird.
 

Duster

Aktives Mitglied
Nun leider geht es mir nicht um den Text-Editor, weil ich ohnehin Notepad++ benutze, aber
letztendlich soll der Text in Outlook importiert werden, und da ist die interpretation die selbe.
 

AlArenal

Top Contributor
In der Regel ist das Problem sehrwohl der Editor. Wenn er die unterschiedlichen Zeilenenenden-Kodierungen die unter Windows und Unix üblich sind erkennt, spielt es auch keine Rolle wie kodiert ist. Öfnne ich beispielsweise ein unter Linux erstelles Readme zu einem Open Source Projekt versehtnlich mit Notepad, hab ich den Schmu zusammengemanscht da stehen.

Benutze ich Crimson (was ich in der Regel tue) oder meinetwegen Wordpad, sind beide schlau genug ums richtig hinzubekommen.

Zum Thema Outlook sage ich nun lieber nichts, um mich nicht noch unbeliebter zu machen ;)
 

byte

Top Contributor
Die API hilft dabei weiter: JTextArea -> DefaultEditorKit:

Newlines
There are two properties which deal with newlines. The system property, line.separator, is defined to be platform-dependent, either "\n", "\r", or "\r\n". There is also a property defined in DefaultEditorKit, called EndOfLineStringProperty, which is defined automatically when a document is loaded, to be the first occurrence of any of the newline characters. When a document is loaded, EndOfLineStringProperty is set appropriately, and when the document is written back out, the EndOfLineStringProperty is used. But while the document is in memory, the "\n" character is used to define a newline, regardless of how the newline is defined when the document is on disk. Therefore, for searching purposes, "\n" should always be used. When a new document is created, and the EndOfLineStringProperty has not been defined, it will use the System property when writing out the document.
 

Duster

Aktives Mitglied
Also ich sehe das Problem nicht bei der JTextArea den wenn ich den Text in eine Variable speichere, kann ich
ihn ja ohnehin noch anpassen.

Code:
String text = jTextArea1.getText();


Nun weiß ich auch, das der Zeilenumbruch das Character 10 ist.
Nun habe ich mal das Character 10 durch das Character 13 ersetzt, sowie durch \n,
aber das Ausgabeergebnis war immer das selbe.

Character 10 durch Character 13 ersetzt :
Code:
text = text.replaceAll(String.valueOf((char)10),String.valueOf((char)13));

Character 10 druch \n ersetzt


Code:
text = text.replaceAll(String.valueOf((char)10),"\n");

So langsam bin ich ratlos...

@AlArenal : langsam mag ich Windows auch nicht mehr
 

thE_29

Top Contributor
Also ich kann sagen das notepad++ das sicher immer richtig aufmacht, da ich es auch oft nutze!

Jedenfalls dein Problem ist halt das unter Unix ein Enter nur ein \n ist und unter windows \r\n!

Rauszufinden geht das via..

System.getProperty("line.separator");
 

Duster

Aktives Mitglied
So ich habe den Befehl einmal ausprobiert :

Code:
System.out.println(System.getProperty("line.seperator"));

Und der Ausgabewert war "null" ???
 

schalentier

Gesperrter Benutzer
line.separator

\n == (char)10 -> Cursor auf naechste Zeile
\r == (char)13 -> An den Anfang der Zeile

Unter *nix reicht \n unter Windows \n\r

So war des glaub ich...
 

Duster

Aktives Mitglied
Also ich habe jetzt mal folgendes probiert :

Code:
text.replaceAll(String.valueOf((char)10),System.getProperty("line.separator")); //mit *Arator :)

Code:
text.replaceAll(String.valueOf((char)10),"\n\r");


Und das schlimme daran, es hat sich nichts verändert...
 

Leroy42

Top Contributor
Meine Güte nochmal

Da muß erst 'nen Besoffener wie ich heute kommen oder wie?

Code:
text.replaceAll(String.valueOf((char)10),System.getProperty("line.separator"));

Kann ja auf 'nerUnix-Kiste nicht gehen:

Einfach alle "\n" für WinDoof durch "\n\r" (oder umgekehrt) ersetzen!
 

Duster

Aktives Mitglied
Genau das habe ich ja gemacht, nur leider klappt es nicht!

Ich habe in einer FOR-Schleife den gesamten Text iteriert, und durch eine IF-Anweisung gefragt
ob das aktuelle Zeichen ein "\n" ist, sollte dies der Fall sein ersetze dies mit "\n\r".

Das klappt ja soweit auch, aber die Ausgabe kann man voll vergessen.
 

Leroy42

Top Contributor
Duster hat gesagt.:
Ich habe in einer FOR-Schleife den gesamten Text iteriert, und durch eine IF-Anweisung gefragt
ob das aktuelle Zeichen ein "\n" ist, sollte dies der Fall sein ersetze dies mit "\n\r".

Poste mal Code.

Übrigens \n ==> \r\n
 

Duster

Aktives Mitglied
Also das funktioniert, aber was ich nicht verstehe, warum die anderen Beispiele nicht funktionierten?

Vielen Dank für eure Hilfe...

Code:
str = str.replaceAll("\\\n","\\\r\\\n");
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben