| |
|
|
Christof Neuß | Salut,
toujours si Du denkst und dir maintenant wieder, venez de irgendwo un Stoppschild her...
si je mon CSV-Dossier avec einem Hex-Editor ouvre, sieht cela am Anfang so aus comment dans qui angehängten Dossier trop ersehen ist.
cet CSV-Fichiers venons de einem Großrechner aus dem centre des comptes et sommes wohl avec einem anderen Zeichensatz codiert. Excel, Windows-Editor et autre Programme faire eigentlich aucun Schwierigkeiten. Evtl. muss je qui ersten beiden marque effacer, mais sonst klappt cela.
je voudrais cet Fichiers - qui durchaus la fois 150 MB grand volonté peut - dans une Speicherbereich et ensuite dans un/plusieurs Arrays magasin, um cet ensuite weiterverarbeiten trop peut. qui "normale", zeilenweise Weg sur "Input #2, DateiInhalt$" funktioniert, ist mais très lente. Daher qui Versuch, qui Dossier avec "Blockread" vite dans une Bereich trop holen.
il y a aucun Fehlermeldung, mais beim ersten 00-Byte, alors pour dem "P" hört Blockread sur.
quoi peux je 1faire ou bien quelle autre elegante Solution gibt es, une CSV-Dossier ruckzuck trop importieren?
Vielen Dank et viele Grüße
Christof |
|
|
| |
|
|
|
Michael W. | FF FE ist qui BOM pour UTF-16-LE.
Windows Unicode ist UTF-16 (LE)
WideString (v X3) peux den BOM erkennen et automatisch entfernen.
BlockRead doit ensuite avec qui alten Syntax avec Offset et Anzahl genutzt volonté. ensuite volonté qui données simple comme Datenblock betrachtet et peut simple lire volonté. avec WideString et naturellement aussi avec "Declare wide stringvar" peux ensuite entier normal aus dem Bereich dans Variablen getextet volonté. |
|
|
| |
|
|
|
Christof Neuß | alors, cela funktioniert maintenant déjà la fois einigermaßen bien. mais je suis encore pas am but...
Var Dossier$="C:\_SEntw\_XProfanX3_1\_TestDB_mit_CSV\GGBIDA_KDU.CSV"
Var DateiLaenge&=FileSize(Dossier$)
MessageBox(Str$(DateiLaenge&),"Meldung",0)'112436764
Var DateiGelesen&=0
Var Ergebnis$=»
Déclarer Bereich#
Faible Bereich#, DateiLaenge&
Assign #1, Dossier$
OpenRW #1
DateiGelesen&=BlockRead(#1, Bereich#, 0, DateiLaenge& )
Fermer #1
MessageBox("Fertig avec Einlesen","Meldung",0)
'Ergebnis$=WideString(Bereich#, 0) '--> dauert ewig
'Ergebnis$=WideChar(Bereich#, 0, DateiLaenge&) '--> Fehlermeldung Zugriffsverletzung!
'Funktioniert so jusqu'à ca. 56.700.000
Ergebnis$=WideChar(Bereich#, DateiLaenge&-100,100)'--> Funktioniert! STRING ist alors vollständig là.
MessageBox(left$(Ergebnis$,300),"Meldung",0)'seulement, afin de voyons, si aussi quoi arrivé ist
qui Dossier ist alors sur 100 MB grand, qui je einlesen voudrais. Einlesen funktioniert aussi. et cela richtig vite. qui anschließende Übertrag dans un normale String-Variable hakt allerdings et avec ca.
Hab's seulement avec WideString() probiert. cela Programme ist weder im Interpreter encore comme EXE zum Ende gekommen. Musste je toujours démolir.
avec WideChar() ca va irgendwie seulement jusqu'à knapp 57 Mio. marque. par-dessus venez une Fehlermeldung.
Habe ensuite la fois cela "Ende" qui Bereichsvariablen überprüft. Klappt. il y a alors alle données im grenier.
quelqu'un encore une concept en supplément?
Wiederum "Danke et Gruß"
Christof |
|
|
| |
|
|
|
H.Brill | qui interne Listboxliste pourrait peut-être. trop petite son. Immerhin le son Aider :
Ab Version 11 peux vous jusque 260.000 Cordes aufnehmen et verwalten
là du Version X3 trop avons scheinst, pourrait on encore den Versuch avec
Move("FileToList", Dateiname$)
essayer.
dans diesem Zusammenhang wäre es intéressant, si le beiden Move-Funktionen (FileToList et ListToFile) aussi qui Codierungen comme optionalen paramètre berücksichten könnten. on hat oui des Öfteren anders (UTF-8, UTF-16 usw.) codierte Textdateien. ensuite pourrait on sich qui separate Umwandlung sparen.
Wäre un Wunsch zum prochain Update. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 06.11.2016 ▲ |
|
|
|
|
Michael W. | je sais oui pas quoi là oui c'est ca ensuite avec den données passer soll. alors simple la fois 2 Überlegungen:
1. Blockweise Einlesen. exposition Dir simple la fois à, comment cela Zeilenende codiert ist. ensuite une grand Block einlesen et zurück jusque einem Zeilenende. alors Nombre de gelesenen marque réduire. cela ganze Travailler et wieder wegschreiben. après à qui neuen (peut-être. reduzierten) Stelle plus einlesen. jusqu'à alles par ist.
2. Kombinieren avec Firebird ou bien SQLite Blockweise Einlesen et juste dans qui banque de données. et ensuite seulement dans qui banque de données Travailler. là dürfen qui données presque beliebig grand volonté.
Es doit oui pas alles dans den RAM jusqu'à cette platzt. si ensuite qui Bearbeitung pas satzweise avoir lieu soll, mais bestimmte Bereiche summiert volonté devoir ist une banque de données sowieso besser, là ensuite mittels Select très viel plus et ensuite aussi très viel plus rapide erledigt volonté peux.
Incidemment dachte je à une ECHTE Csv-Dossier. cet besteht aus mehreren Sätzen (Zeilentrenner inconnu, là Ausschnitt trop petite) et dedans qui Sätze aus mehreren Feldern (qui avec TAB \t getrennt sommes). |
|
|
| System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 07.11.2016 ▲ |
|
|
|
|
Christof Neuß | allô Michael,
vielen Dank pour qui Hinweise, qui mir déjà bien weitergeholfen avons. aussi si je maintenant wieder längere Zeit avec anderen Dingen beschäftigt était, ist cela Thema encore aktuell pour mich.
Aufgrund qui einfachen Einbindung de Firebird, werde je avec cela travailler. but/devoir ist es, plusieurs (relativ grand) CSV-Fichiers (Tab getrennt, UTF-16) possible vite dans qui banque de données trop übertragen.
peut-être la hâte Du encore un paire Tipps pour mich (naturellement darf sich aussi chacun autre volontiers annoncer), comment je cela am besten hinbekomme?!
Vielen Dank et Salut
Christof |
|
|
| |
|
|