Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zeichenkette einlesen - Windows10 korrekt, Windows7 nicht

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pzktupel



Anmeldungsdatum: 07.07.2020
Beiträge: 81

BeitragVerfasst am: 15.05.2022, 07:33    Titel: Zeichenkette einlesen - Windows10 korrekt, Windows7 nicht Antworten mit Zitat

Hallo !
Ich weiß nicht, obs bekannt war...
Ich habe 2 PCs (baugleich) , einmal Win10 64bit und Win7 64bit.
Jetzt habe ich ein Programm geschrieben, das von Quellen große Zeichenketten einlesen muss. Während Win10 fehlerfrei es tat, passierte ohne Absturz unter Win7 was anderes.
Nach 1 Tag Fehlersuche fand ich den Grund.
Wird unter Win 7 eine Datei mit einer Stringlänge von mehr als 2^32 Byte (oder 2^31 Byte ???) eingelesen, passieren Fehler ohne Absturz, unter Win10 nicht.
Zerstückelt man das Einlesen in Blöcke , ist es okay.

Ich wollte es nur mal erwähnen...

Gruß
_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 15.05.2022, 14:38    Titel: Antworten mit Zitat

Verwendest du beide Male denselben Compiler? (Sprich: beide Male der 64bit-Compiler?)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pzktupel



Anmeldungsdatum: 07.07.2020
Beiträge: 81

BeitragVerfasst am: 15.05.2022, 20:02    Titel: Antworten mit Zitat

Huhu !
Also das wurde 1mal compiliert und auf den 2. PC kopiert.

Aber! die Idee hatte ich auch und kompilierte es auf dem PC 2 ....derselbe Fehler in der Verarbeitung. Aufs Bit genau waren beide Datein nach dem kompilieren. (win10 und 7)

baugleiche Systeme: MSI Gaming B450M, 32GB RAM, Ryzen 7 1700

Die verdichtete Primzahldatei bis 9 Mrd ( ~ 1,2 GB ) wurde auf beiden
korrekt eingelesen (400 Mio Zahlen)

Zwei weitere Datein an diese gekoppelt haben über 5GB. Liest man es als eine Kette ein, arbeitet das Program unter Windows 7 fehlerhaft...er schreibt in den RAM ab einer bestimmten Position nur noch Nullen.
_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 15.05.2022, 22:36    Titel: Antworten mit Zitat

Kannst du uns den Codeteil des Einlesen und in's RAM kopieren aufzeigen?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pzktupel



Anmeldungsdatum: 07.07.2020
Beiträge: 81

BeitragVerfasst am: 16.05.2022, 02:55    Titel: Antworten mit Zitat

Ja, hier:
Code:

#INCLUDE "windows.bi"
#INCLUDE "vbcompat.bi"

Dim As Any Ptr T1,T2,T3,T4,T5,T6,T7,T8

DIM AS UINTEGER pc,i,check,CB,j,PPP
DIM AS INTEGER ocstart
DIM AS USHORT EE,CC,yi,dis

DIM SHARED AS UINTEGER TS,O,Pspr

DIM SHARED AS STRING S,T,FF
DIM AS BYTE k,sp,TNR

....


PC=0

S=""
REDIM SHARED MA(400000000) AS UINTEGER
OPEN "E:\TUPEL\13#_10Mrd.src" FOR Binary Access Read AS #110
   S=INPUT(4400000000,#110)
   CB=1
   WHILE CB<4400000000
   PC+=1:MA(PC)=VALULNG(MID(S,CB,11))
   CB+=11
   WEND
 
CLOSE #110


Die Lesegröße von 4400000000 Byte unter Windows 7 liefert falsches in die Zelle MA(PC) ab einer Position X, wahrscheinlich X>2^31 oder 2^32

Bewährte Lösung, Auszug:

Code:

S=""
REDIM SHARED MA(400000000) AS UINTEGER
OPEN "E:\TUPEL\13#_10Mrd.src" FOR Binary Access Read AS #110

PC=0
FOR j=1 TO 40
S=INPUT(110000000,#110)
   CB=1
   WHILE CB<110000000
   PC+=1:PPP=VALULNG(MID(S,CB,11))
   MA(PC)=PPP
   CB+=11
WEND
NEXT j
CLOSE #110


_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz