Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
oop
Ich kann sehen, dass oop... warum schreiben Arrays in Zeichenfolgen, wenn Sie sie in binäre auf einmal schreiben können
Ich kann sehen, dass oop... warum schreiben Arrays in Zeichenfolgen, wenn Sie sie in binäre auf einmal schreiben können?
Es steht geschrieben, der Mann bearbeitet sie in Excel.
Dort steht, dass der Mann sie in Excel verarbeitet.
das steht da nicht
Das steht dort nicht.
Der allererste Beitrag. Wenn Sie genau lesen, hat diese Datei möglicherweise nichts mit MT5 zu tun. Oder auf eine bestimmte Weise behandelt werden.
Der allererste Beitrag. Wenn Sie genau lesen, hat diese Datei möglicherweise nichts mit MT5 zu tun. Oder auf eine bestimmte Weise behandelt werden.
Er soll also selbst entscheiden, woher er die Informationen bekommt.
Kann auch als Array gelesen werden, denke ich.Vielen Dank für die Analyse des Codes.
Es fällt mir schwer, OOP zu verstehen, daher ist es für mich eine Qual, Änderungen daran vorzunehmen. So wie ich es verstanden habe, geht es um die Klasse, die für das Lesen zuständig ist, dass dort die ganze Datei in String-Arrays aufgeteilt wird, und erst dann, wenn ich will, konvertiere ich diese String-Werte in einen anderen Typ und setze sie in Arrays vom Typ int in mein Skript. Wenn ich es richtig verstehe, dann sollte ich, um den Prozess zu beschleunigen, die gesamte Datei lesen und herausfinden, wie viele Zeilen und Spalten es gibt und wie viele Symbole in jeder Zelle sind, und dann sofort die Feldgröße auswählen? Wie kann man das dann tun?
Ich würde gerne verstehen, woher die 400 Megabyte auf einmal kommen? Habe ich es richtig verstanden, dass Speicher zugewiesen wird, aber es wird nicht gelöscht/verschenkt, die zuvor zugewiesen wurde?
400 MB sind 36 Millionen Zellen mit leeren Zeilen zu je 12 Byte, 12*36=432.
Wenn Sie wissen wollen, wie Sie es besser machen können, erzählen Sie uns von dem Problem, das Sie lösen wollen. Wie oft und wie stark sich die Datei ändert, ob alle jedes Mal aus ihr lesen müssen, ob die Anzahl der nicht leeren Zellen von Zeile zu Zeile konstant ist, ob alle Zellen nur ganze Zahlen enthalten. Vielleicht sollte man einmal in der Woche 9 Minuten aufwenden, und das ist gar nicht viel - dann braucht man nichts zu ändern.
Im Allgemeinen besteht die Hauptrichtung in der Deklaration einer Struktur mit 57 Feldern, die Integer-Werten entsprechen, und deren Verwendung sowohl zum Schreiben als auch zum Lesen (die Datei ist binär). Dann werden 78 MB in weniger als einer Sekunde von der Festplatte direkt in den Speicher eingelesen, ohne Begrenzungszeichen oder Zeichenfolgendarstellungen. Speichern Sie die Ausgabe zu Debugging-Zwecken auch im .csv-Format. Die Dateigröße bestimmt unmittelbar die Anzahl der Elemente im Array dieser Strukturen.
400 MB sind 36 Millionen Zellen mit leeren Zeilen zu je 12 Byte, 12*36=432.
Die Rechnung ist klar.
Wenn Sie wissen wollen, wie Sie es besser machen können, erzählen Sie uns von dem Problem, das Sie lösen wollen. Wie oft und wie stark sich die Datei ändert, ob jedes Mal alles aus ihr gelesen werden muss, ob die Anzahl der nicht leeren Zellen von Zeile zu Zeile konstant ist, ob alle Zellen nur ganze Zahlen enthalten. Vielleicht sollte man einmal in der Woche 9 Minuten aufwenden, und das ist gar nicht viel - dann braucht man nichts zu ändern.
Die Aufgabe ist universell, es geht um das Einlesen von Dateien im CSV-Format, denn dieses Format ist universell für verschiedene Programme, die mich derzeit mit Daten versorgen. Wenn Sie sich speziell auf dieses Skript beziehen, dann ja, Sie müssen nur alles lesen und berechnen, denn Excel stürzt wegen der Formeln ab. Die Zellen können auch nicht-ganzzahlige Werte enthalten (nicht speziell in diesem Beispiel). 9 Minuten sind nicht viel, wenn es einmal in der Woche ist... Doch unter anderem muss ich mit einer solchen Menge von Daten durch Optimierer arbeiten, Übergabe der Datei auf der Seite und dort die Durchführung seiner Verarbeitung mit Hilfe von Agenten, dann erhalten das Ergebnis im CSV-Format (hier kann ich natürlich in einem anderen Format) und führen eine weitere Verarbeitung. Deshalb habe ich mich entschlossen, dieses Problem öffentlich zu diskutieren, denn ich möchte mit MT5 große Datenmengen verarbeiten.
Und im Allgemeinen, von "wo zu gehen, um schneller zu sein" Sicht - Mainstream: deklarieren Struktur, 57 Felder, von denen Integer-Werte entsprechen, und verwenden Sie es für beide Schreiben und Lesen (Datei ist binär). Dann werden 78 MB in weniger als einer Sekunde von der Festplatte direkt in den Speicher eingelesen, ohne Begrenzungszeichen oder Zeichenfolgendarstellungen. Speichern Sie die Ausgabe zu Debugging-Zwecken auch im .csv-Format. Die Dateigröße bestimmt unmittelbar die Anzahl der Elemente in dem Array dieser Strukturen.
Ich kann mir gar nicht vorstellen, wie das gehen soll. Oder muss die Ausgangsdatei unter besonderen Bedingungen erstellt werden? Vielleicht können Sie dann einen Konverter vom CSV- zum Binärformat erstellen?
Können Sie sich auch die zweite Klasse ansehen, wie man ihr beibringt, eine unbegrenzte Anzahl von Spalten zu schreiben?
WriteArray / Read sind schnell, max Größe bis zu 300 mb, alles ist sehr schnell, nicht verbrauchen RAM
Warum gibt es so viel Code für das Lesen/Schreiben, es ist alles in 4 Zeilen erledigt.
Können Sie uns zeigen, wie man das macht?
also soll er selbst entscheiden, woher er sie bekommt
kann auch als Array gelesen werden, denke ichCSV ist ein universelles Dateiformat, das von verschiedenen Programmen unterstützt wird, unter anderem von der Software, die mit dem MO.
Außerdem ist es eine bequeme Datei, um Daten zwischen verschiedenen Programmen (Skripte/Advisoren) MT5 zu übertragen, und sie nimmt nicht viel Platz ein.
Können Sie uns zeigen, wie man das macht?
Versuchen Sie, Ihre Datei wie folgt zu lesen
https://www.mql5.com/ru/docs/files/filereadarray
Ich habe jetzt keine Zeit, das Terminal zu öffnen, vielleicht morgen)