Wie kann ich eine CSV im UTF8 Format speichern/schreiben?

 
Ist das Möglich?
 
Schau mal nach unter FileCreate() und die Flags: "FILE_UNICODE  64  Zeilen des Typs UNICODE (2-Byte-Symbole). Flagge wird beim Oeffnen von Dateien (FileOpen()) verwendet"
 
Carl Schreiber:
Schau mal nach unter FileCreate() und die Flags: "FILE_UNICODE  64  Zeilen des Typs UNICODE (2-Byte-Symbole). Flagge wird beim Oeffnen von Dateien (FileOpen()) verwendet"

FileCreate leider nicht gefunden, habe jetzt mal in  FileOpen reingeschaut.


Finde zwar:

"FILE_ANSI Zeilen des Typs ANSI (Einbyte-Symbole)
FILE_UNICODE Zeilen des Typs UNICODE (Zweibyte-Symbole) "

und

"

Hinweis

Aus Sicherheitsgründen ist die Arbeit mit Dateien in MQL5 streng gesteuert. Dateien, mit denen Datei-Operationen mittels MQL5 durchgeführt werden, können nicht außerhalb der Datei-Sandbox sein.

Wenn eine Datei in einer bestimmten Codierung gelesen werden muss (es wurde der Parameter codepage mit einem Wert der Codepage angegeben), muss das Flag FILE_ANSI gesetzt werden. Wenn das Flag FILE_ANSI nicht angegeben wurde, wird die Textdatei in Unicode ohne Konvertierung gelesen.

"

kann daraus aber leider immernoch nicht wirklich ziehen was ich implementieren muss...

 

"kann daraus aber leider immernoch nicht wirklich ziehen was ich implementieren muss..."

Verstehe ich nicht steht doch alles da, was notwendig ist (man müsste noch einen Mausklick für die Codeseiten investieren!):

Parameter

file_name

[in]  Name der geöffneten Datei, kann Unterordner haben. Wenn die Datei für Schreiben geöffnet wird, werden die angegebenen Unterordner erzeugt werden, wenn sie es nicht gibt.

open_flags

[in] Kombination der Flaggen, die Arbeitsmode mit Datei bestimmt. Flaggen werden folgenderweise bestimmt:
FILE_READ Datei wird für Lesen geöffnet  
FILE_WRITE Datei wird für Schreiben geöffnet  
FILE_BIN Binärmode Lesen-Schreiben (ohne Umwandlung der Zeile in die Zeile)
FILE_CSV Date des Typs csv (alle geschriebenen Elemente werden in die Zeilen des entsprechenden Typs umgewandelt, unicode oder ansi, und durch Begrenzer getrennt)  
FILE_TXT einfache Textdatei (dieselbe csv, aber Begrenzer wird nicht berücksichtigt)  
FILE_ANSI Zeilen des Typs ANSI (Einbyte-Symbole)
FILE_UNICODE Zeilen des Typs UNICODE (Zweibyte-Symbole)
FILE_SHARE_READ Gesamter Lesezugang von mehreren Programmen  
FILE_SHARE_WRITE Gesamter Schreibezugang von mehreren Programmen  
FILE_COMMON Lage der Datei im Gesamtordner aller Client-Terminals \Terminal\Common\Files

delimiter='\t'

[in]  Wert, der als Begrenzer in txt oder csv-Datei verwendet wird.Wenn der Begrenzer für csv-Datei nicht angegeben wird, wird als Default-Wert Tab-Symbol verwendet. Wenn der Begrenzer für txt-Datei nicht angegeben wird, wird keiner Begrenzer verwendet. Wenn Begrenzer auf Null gestellt wird, wird keiner Begrenzer verwendet.

codepage=CP_ACP

[in] Wert der Kodeseite. Für die am meisten verwendeten Kodeseiten werden entsprechende Konstanten vorausgesehen. 
 
Vielleicht soltest überlegen ob es auch andere wege gibt als diese ungewöhnlichen formate, was auch immer man damit machen will
 
Carl Schreiber:

"kann daraus aber leider immernoch nicht wirklich ziehen was ich implementieren muss..."

Verstehe ich nicht steht doch alles da, was notwendig ist (man müsste noch einen Mausklick für die Codeseiten investieren!):

Unicode ist doch nicht UTF8 (letzteres brauche ich). Die CSVs werden bei mir bereits standard in Unicode geschrieben. (Falls du überhaupt Unicode meintest)

@amando für Pyhton Jupyter leider unumgänglich :(

 
Bayne:

Unicode ist doch nicht UTF8 (letzteres brauche ich). Die CSVs werden bei mir bereits standard in Unicode geschrieben. (Falls du überhaupt Unicode meintest)

@amando für Pyhton Jupyter leider unumgänglich :(

https://www.mql5.com/de/articles/2720

Da steht drin wie du das gewünschte erreichen kannst.

Leider ist der entscheidene Teil sehr mager .Deswegen nun doch Code:

void OnStart(){
   int h=FileOpen("test_UTF8.csv",FILE_WRITE|FILE_ANSI|FILE_CSV,";",CP_UTF8);
   if(h==INVALID_HANDLE){
      Alert("Error opening file");
      return;
   }
   for(int i=1;i<=10;i++){
      string str="Line-"+IntegerToString(i)+"-";
      FileWrite(h,str+"1",str+"2",str+"3");
   }
   FileClose(h);
   Alert("File created");
}
MQL5 Grundlagen der Programmierung: Dateien
MQL5 Grundlagen der Programmierung: Dateien
  • www.mql5.com
Wie viele andere Programmiersprachen besitzt auch MQL5 Funktionen für das Arbeiten mit Dateien. Das Arbeiten mit Dateien ist zwar keine sehr häufige Aufgabe bei der Entwicklung von MQL5 Expert Advisors und Indikatoren, aber jeder Entwickler wird früher oder später damit konfrontiert. Die Palette der Themen, die das Arbeiten mit Dateien...