Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 02.12.2008, 14:40 Titel: Input # - begrenzte Länge Strings? |
|
|
Hallo!
Habe grad ein Programm, dass mit "Input #" Variablen aus
einer Datei liest. Unter anderem Strings, die teilweise recht
lang sind.
Scheinbar zu lang, da er bei (mit len gemessenen) 4096 Zeichen
den String abbricht
Lese ich die ganze Zeile aus der Datei allerdings mit "line input" in
die selbe Variable, funktioniert es...
Kann es also sein, dass bei Input # die Grösse der eingelesenen Variablen begrenzt ist?
Und kann man dies umgehen? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.12.2008, 15:10 Titel: |
|
|
Sollte so eigentlich nicht passieren,
wenn nicht bei "Input #, String" nach 4096 Zeichen ein Wert mit 0 steht (Strings enden vor dem 0 Zeichen).
So wie bei "Line Input #, String" mit dem CRLF (CHR(10,13)) die Zeile endet.
Sonst kannst du nur binär die Zeichen in einen definierten Speicherbereich (Allocate) einladen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 02.12.2008, 15:13 Titel: |
|
|
INPUT # bricht jedenfalls auch bei einem Komma ab, oder anders herum: Du kannst mehrere verschiedene, durch Komma getrennte Inhalte speichern und auslesen. LINE INPUT liest bis zum Zeilenende, egal ob er auf ein Komma stößt oder nicht.
Ob INPUT # auch bei einer Länge von 4096 Zeichen abbricht, weiß ich nicht; jedenfalls ist die Zahl verdächtig, da das genau 2^12 sind. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 02.12.2008, 15:18 Titel: |
|
|
@volta: nope, ne 0 gibts da nicht..
@nemored: Kommas sind auch nicht drin..., bzw. die Daten in dem File sind bei mir auch durch Kommata getrennt.
also weiterhin ein Rätsel  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 02.12.2008, 15:24 Titel: |
|
|
Versuch mal ob bei
Code: | Dim a as string*10000 |
Input #, a nach 10000 Zeichen abbricht? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 02.12.2008, 17:37 Titel: |
|
|
Hilft leider auch nix... liegt in dem Sinne auch nicht an der Variable, da bei:
Code: | Type udt
Number As Integer
User As String
Datum As Double
Uhr As Double
Text As String
End Type
Redim Shared post() As udt
Open "out.txt" for input as #1
Do
idx+=1
Redim Preserve post(idx)
Input #1,post(idx).Number, d,d,d,post(idx).Text 'die Variable
Text abgeschnitten, und bei
Line Input #1,post(idx).Text '(natürlich an gleicher Position in Datei) die gleiche Variable Text nicht abgeschnitten, und ja sogar noch um die Vars davor länger wird...
|
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 03.12.2008, 09:28 Titel: |
|
|
Thx für den Link, aber des ist doch nur für Tatatureingaben gedacht, oder?
Ich lese ja aus einer Datei ein. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 03.12.2008, 16:16 Titel: |
|
|
Beispiel von mir ist für Tastatureingabe (Eingabemasken in DOS-Anwendungen). Sonst wenn es um Dateien geht, dann ist der Fall wesentlich einfacher:
=> Lies dazu
http://www.freebasic-portal.de/index.php?s=reftopic&id=318
durch! Diese Funktion gab es bereits in QB.
Wichtige Kleinigkeit im Verhalten: An und für sich entspricht diese Funktion in etwa einem fread() in C unter UNIX/Linux. Während letzteres immer die effektiv gelesene Anzahl Zeichen zurückmeldet (=wenn Datei bald am Ende ist, wird halt einfach nur noch der Rest eingelesen), generierte zumindest QB einen Laufzeitfehler, weil es stur versucht, soviele Zeichen einzulesen. Ob die FreeBasic-Entwickler dies verbessert haben (=ohne Murren einfach einen verkürzten String zurückliefern, falls Datei bald am Ende), kann ich nicht sagen => Test empfohlen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 03.12.2008, 16:38 Titel: |
|
|
Zugegeben, den Befehl zum einlesen einer bestimmten Anzahl von Zeichen aus einer Datei kannte ich noch gar nicht,
hilft mir aber noch weniger, da "n" auf 255 Zeichen begrenzt ist.
@dreael, meinen Codeblock oben hast schon gesehen, oder? Nimms mir nicht böse, aber es kommt mir fast so vor, dass du versuchst mir zu erklären, wie man allgemein Zeichen einliest Aber ich (oder FB) habe ja eigentlich ein ganz spezielles Problem  |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 03.12.2008, 17:52 Titel: Re: Input # - begrenzte Länge Strings? |
|
|
SvenStueck hat Folgendes geschrieben: | Hallo!
Habe grad ein Programm, dass mit "Input #" Variablen aus
einer Datei liest. Unter anderem Strings, die teilweise recht
lang sind.
Scheinbar zu lang, da er bei (mit len gemessenen) 4096 Zeichen
den String abbricht
Lese ich die ganze Zeile aus der Datei allerdings mit "line input" in
die selbe Variable, funktioniert es...
Kann es also sein, dass bei Input # die Grösse der eingelesenen Variablen begrenzt ist?
Und kann man dies umgehen? |
Hab ich nicht feststellen können, auch nicht als ich mit MuhEdit knapp 200 MB text eingelesen hab (10000 zeichen pro zeile?) Auch ne Internetbekanntschafft konte mit MuhEdit ca 512MB text verarbeiten (ca 20000 zeichen pro zeile)
Und MuhEdit benutzt auch Line Input zum einlesen der datei.
Mich wunderts ja, das du deinen code noch nicht hier gepastet hast, sowas vereinfach die hilfe ungemein.
mfg
The_Muh _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 03.12.2008, 18:03 Titel: Re: Input # - begrenzte Länge Strings? |
|
|
The_Muh hat Folgendes geschrieben: |
Hab ich nicht feststellen können, auch nicht als ich mit MuhEdit knapp 200 MB text eingelesen hab (10000 zeichen pro zeile?) Auch ne Internetbekanntschafft konte mit MuhEdit ca 512MB text verarbeiten (ca 20000 zeichen pro zeile)
Und MuhEdit benutzt auch Line Input zum einlesen der datei.
Mich wunderts ja, das du deinen code noch nicht hier gepastet hast, sowas vereinfach die hilfe ungemein.
mfg
The_Muh |
Hi! ein Ausschnitt ist ja oben. Der sollte auch alles relevante beinhalten, wie ich finde
Ne, mit Line Input hauts ja auch hin. Das Problem taucht nur mit Input # auf. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 03.12.2008, 18:07 Titel: |
|
|
SvenStueck hat recht!
Ich habe es gerade ausprobiert.
Es werden aus einem Inputbuffer nur 4096 Byte bei "Input #, string" in den String übertragen (bei "Line Input #, String" ist das nicht so).
Das ist kein Bug!!!!!
siehe: http://www.freebasic.net/forum/viewtopic.php?p=94187#94187
Zitat: | Currently, all input for strings/zstrings is (arbitrarily) limited to 4096 characters. |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 04.12.2008, 09:23 Titel: |
|
|
volta hat Folgendes geschrieben: | SvenStueck hat recht!
Ich habe es gerade ausprobiert.
Es werden aus einem Inputbuffer nur 4096 Byte bei "Input #, string" in den String übertragen (bei "Line Input #, String" ist das nicht so).
Das ist kein Bug!!!!!
siehe: http://www.freebasic.net/forum/viewtopic.php?p=94187#94187
Zitat: | Currently, all input for strings/zstrings is (arbitrarily) limited to 4096 characters. |
|
Ah, Danke! Hätt ich auch mal drauf kommen können, in dem Forum zu suchen
Schade, dass des nicht in der Hilfe vermerkt ist.
Dann probier ich es hald mal mit den alternativen Mehoden. Also GET oder LINE INPUT... |
|
Nach oben |
|
 |
SvenStueck
Anmeldungsdatum: 12.05.2005 Beiträge: 58
|
Verfasst am: 04.12.2008, 10:12 Titel: |
|
|
Hmm, mal was anderes: Ich habe da ein Problem mit dem CharToOem aus der windows.bi.
Code: | #include "windows.bi"
dim as string inDatei="über"
dim as string SollSein="über"
print inDatei, SollSein
CharToOem inDatei,inDatei
CharToOem SollSein, SollSein
print inDatei,SollSein
sleep
end |
Was ist des für eine beschissene Codierung der Datei, dass "über" da als "über" drinsteht? Und wie kann ich des wieder lesbar machen? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 04.12.2008, 14:36 Titel: |
|
|
UTF-8/16/32 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 04.12.2008, 14:37 Titel: |
|
|
UTF-8/16/32
Da ist die Encoding Klausel dein Freund... |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 04.12.2008, 15:02 Titel: |
|
|
hatte mich vor laengerem mal damit befasst und zuletzt kam dann sowas hier raus, hatte recht gut funktioniert....
Code: |
Declare Function myCharToUTF Cdecl Alias "fb_CharToUTF" _
( Byval encod As Integer, _
Byval src As Zstring Ptr, _
Byval chars As Integer, _
Byval dst As Any Ptr, _
Byval bytes As Integer Ptr ) As Any Ptr
Declare Function myUTFToChar Cdecl Alias "fb_UTFToChar" _
( Byval encod As Integer, _
Byval src As Any Ptr, _
Byval dst As Zstring Ptr, _
Byval chars As Integer Ptr ) As Zstring Ptr
Declare Function myASCII2UTF (Byval ConvertString As String) As String
Declare Function myUTF2ASCII (Byval ConvertString As String) As String
/'
myASCII2UTF
Syntax : myASCII2UTF (MeinText[$])
Typ : Funktion
Kategorie : Stringmanipulation
Wandelt einen "String" mit ASCII Inhalt
zu einen "String" mit UTF8 Inhalt um.
'/
Function myASCII2UTF (Byval ConvertString As String) As String
Dim As Zstring Ptr pZ
Dim As Zstring Ptr pR
Dim As Integer lS
Dim As Integer Ptr pI
lS = Len(ConvertString)
pI = Callocate(4)
pR = Callocate(4 * lS)
pZ = Strptr(ConvertString)
myCharToUTF( 1, pZ, lS, pR, pI)
pR = Reallocate(pR, *pI)
Function = *pR
Deallocate pI
Deallocate pR
End Function
/'
myASCII2UTF
Syntax : myUTF2ASCII (MeinText[$])
Typ : Funktion
Kategorie : Stringmanipulation
Wandelt einen "String" mit UTF8 Inhalt
zu einen "String" mit ASCII Inhalt um.
'/
Function myUTF2ASCII (Byval ConvertString As String) As String
Dim As Zstring Ptr pZ
Dim As Zstring Ptr pR
Dim As Integer lS
Dim As Integer Ptr pI
lS = Len(ConvertString)
pI = @lS
pR = Callocate(lS)
pZ = Strptr(ConvertString)
myUTFToChar( 1, pZ, pR, pI)
pR = Reallocate(pR, *pI)
Function = *pR
Deallocate pI
Deallocate pR
End Function
|
_________________
 |
|
Nach oben |
|
 |
|