und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
Demo_FileTell - Skript für den MetaTrader 5
- Ansichten:
- 780
- Rating:
- Veröffentlicht:
- 2016.06.20 13:23
- Aktualisiert:
- 2016.11.22 07:34
- Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Das Skript öffnet die Textdatei, analysiert die Positionen der String-Startpunkte in dieser Datei und zeigt den Stringtext mit einer Zufallszahl an. Um das Array von den Startpositionen für jede Zeichenfolge in der Datei zu bestimmen, wurde die GetStringPositions()-Funktion geschrieben. Die Funktion sucht den String-Startpunkt unter Berücksichtigung der Art der Codierung der Dateien, die im "InpEncodingType" Eingabeparameter angegeben werden kann.
Neben der FileTell() Funktion, verwendet das Skript auch die FileGetInteger() Funktion um die Art der Codierung zu ermitteln, die FileIsEnding() Funktion um das Ende der Datei zu estimmen und die FileSeek() Funktion um die Positon der Zeilenschaltung in der Datei zu verschieben, wenn der String mit einer Zufallszahl angezeigt wird.
Code:
//--- Zeige Fenster mit den Eingabeparametern, wenn Sie das Skript starten #property script_show_inputs Eingabeparameter: input string InpFileName="file.txt"; // Dateiname input string InpDirectoryName="Data"; // Verzeichnisname input int InpEncodingType=FILE_ANSI; // ANSI=32 oder UNICODE=64 //+------------------------------------------------------------------+ //| Skript Programmstart Funktion | //+------------------------------------------------------------------+ void OnStart() { //--- Wert für Variable zur Generierung von Zufallszahlen festlegen _RandomSeed=GetTickCount(); //--- Variablen für Positionen der String-Startpunkte ulong pos[]; int size; //--- Fehlerwert zurücksetzen ResetLastError(); //--- Datei öffnen int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_TXT|InpEncodingType); if(file_handle!=INVALID_HANDLE) { PrintFormat("%s Datei ist bereit zum Lesen",InpFileName); //--- Startpunkt für jeden String der Datei ermitteln GetStringPositions(file_handle,pos); //--- Anzahl der Strings in der Datei bestimmen size=ArraySize(pos); if(!size) { //--- beenden, wenn die Datei keine Strings enthält PrintFormat("%s Datei ist leer!",InpFileName); FileClose(file_handle); return; } //--- Zufälliger Auswahl einer Stringnummer int ind=MathRand()%size; //--- Verschiebung der Position an den Startpunkt des Strings FileSeek(file_handle,pos[ind],SEEK_SET); //--- lesen und Ausgeben des String mit ind Nummer PrintFormat("Stringtext mit %d Nummer: \"%s\"",ind,FileReadString(file_handle)); //--- Datei schließen FileClose(file_handle); PrintFormat("%s Datei ist geschlossen",InpFileName); } else PrintFormat("Fehler beim Öffnen der Datei %s , Fehlercode = %d",InpFileName,GetLastError()); } //+-------------------------------------------------------------------------------+ //| Die Funktion definiert Startpunkte für jeden String in der Datei und | //| kopiert diese in das Array arr | //+-------------------------------------------------------------------------------+ void GetStringPositions(const int handle,ulong &arr[]) { //--- Standard Arraygröße int def_size=127; //--- Speicher für das Array reservieren ArrayResize(arr,def_size); //--- Stringzähler int i=0; //--- wenn das nicht das Dateiende ist, dann gibt es mindestens einen String if(!FileIsEnding(handle)) { arr[i]=FileTell(handle); i++; } else return; // die Datei ist leer, Ende //--- definiere die Verschiebung in Bytes abhängig von der Codierung int shift; if(FileGetInteger(handle,FILE_IS_ANSI)) shift=1; else shift=2; //--- in der Schleife die Strings durchgehen while(1) { //--- String lesen FileReadString(handle); //--- auf Dateiende prüfen if(!FileIsEnding(handle)) { //--- Position des nächsten Strings speichern arr[i]=FileTell(handle)+shift; i++; //--- bei Überlauf Größe des Strings vergrößern if(i==def_size) { def_size+=def_size+1; ArrayResize(arr,def_size); } } else break; // Ender der Datei, Ende } //--- definiere aktuelle Größe des Arrays ArrayResize(arr,i); }
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1634
Das Skript demonstriert ein Beispiel für die Verwendung der FileSize() Funktion
Demo_FileReadDoubleDer Indikator demonstriert ein Beispiel für die Verwendung der FileReadDouble() Funktion
Das Skript demonstriert ein Beispiel für die Verwendung der FileWriteInteger() Funktion
Demo_FileReadIntegerDer Indikator demonstriert ein Beispiel für die Verwendung der FileReadInteger() Funktion