Ik ben nu een programma aan het maken dat geen gebruik maakt van een DBMS, maar gewoon losse bestanden. Alleen nu moet ik ook strings gaan oplsaan. Op zich geen probleem, maar ik wil dat elke string op zijn eigen regel komt. Dus maximaal één regel per string. Alleen weet ik niet hoe ik een string op een goede manier kan escapen.
\n ?
En als verder \n ook mogen voorkomen in de tekst op de databases, dan moet je een token zien te vinden waarmee je dus kan zien dat het een van jezelf is. En dit lijkt me vrij lastig omdat je natuurlijk nooit kan garanderen dat jouw sequence niet per ongeluk een nuttige tekst is in de database.
[k*t oplossing]
Maar probeer anders eens:
int_is_super_koel_en_dit_is_een_stom_stuk_tekst als scheidingstoken. De kans is erg klan dat een ander dit stuk tekst ook al gebruikt
En als verder \n ook mogen voorkomen in de tekst op de databases, dan moet je een token zien te vinden waarmee je dus kan zien dat het een van jezelf is. En dit lijkt me vrij lastig omdat je natuurlijk nooit kan garanderen dat jouw sequence niet per ongeluk een nuttige tekst is in de database.
[k*t oplossing]
Maar probeer anders eens:
int_is_super_koel_en_dit_is_een_stom_stuk_tekst als scheidingstoken. De kans is erg klan dat een ander dit stuk tekst ook al gebruikt
[ Voor 100% gewijzigd door Alarmnummer op 23-04-2003 16:24 ]
Ik kan wel \n gaan escapen, maar dan krijg je bij het terugzetten problemen wanneer iemand gewoon \n in zijn string zet.
ik zou gaan voor \n\r (ja niet verkeerd om)
\n\r is nl een \r\n verkeerd om (de windows enter)
en evt kan je \0 erbij zetten
\0\n\r\0 (dan moet het wel betrekkelijk uniek zijn, aangezien de \0 (null karakter) niet in strings mogen voorkomen
\n\r is nl een \r\n verkeerd om (de windows enter)
en evt kan je \0 erbij zetten
\0\n\r\0 (dan moet het wel betrekkelijk uniek zijn, aangezien de \0 (null karakter) niet in strings mogen voorkomen
Ik stink niet, ik ruik gewoon anders
nou de \0 (0x00) is een karakter dat normaal strings afsluit.
dus als je een string hebt "dit is een string"
dan staat dit in het geheugen:
dit is een string\0
Dit noemen ze een null terminated string. Deze is zeer gebruikelijk.
Als je een enter tiept en opslaat in windows codering dan slaat hij 2 karakters op
een \r (carriage return) en een \n (newline)
onder bijv *nix is dit alleen een \n
als je de windows enter omdraait \n\r dan krijg je dus een volgorde die je normaal niet tegen zal komen.
Zet jet hier voor en achter nog een null karakter (de \0) dan heb je due \0\n\r\0
Dit is een reeks karakters die je normaal gesproken nooit kan tiepen (ik heb geen toets voor een null karakter op mijn toetsenbord).
Dus heb je een unieke afscheiding, en kan je hierop je strings afscheiden. (moet je wel binair gaan lezen denk ik, weet ik niet zeker)
dus als je een string hebt "dit is een string"
dan staat dit in het geheugen:
dit is een string\0
Dit noemen ze een null terminated string. Deze is zeer gebruikelijk.
Als je een enter tiept en opslaat in windows codering dan slaat hij 2 karakters op
een \r (carriage return) en een \n (newline)
onder bijv *nix is dit alleen een \n
als je de windows enter omdraait \n\r dan krijg je dus een volgorde die je normaal niet tegen zal komen.
Zet jet hier voor en achter nog een null karakter (de \0) dan heb je due \0\n\r\0
Dit is een reeks karakters die je normaal gesproken nooit kan tiepen (ik heb geen toets voor een null karakter op mijn toetsenbord).
Dus heb je een unieke afscheiding, en kan je hierop je strings afscheiden. (moet je wel binair gaan lezen denk ik, weet ik niet zeker)
Ik stink niet, ik ruik gewoon anders
Ah thanks ik snap je idee
. Ik zal eens kijken of ik hiermee alles kan doen wat ik wil (en of het lukt
).
succes ermee.
Mocht het niet werken, dan zal je het binair moeten gaan opslaan een een index betand maken waarin staat waar een nieuwe string begint (denk maar aan de TOC op een cd of een FAT op fat32), maar dit is meer programmeer werk, maar met goed programmeer werk is wel wel fail proof, omdat je dan echt alle karakters kan gebruiken (ook de \0)
Mocht het niet werken, dan zal je het binair moeten gaan opslaan een een index betand maken waarin staat waar een nieuwe string begint (denk maar aan de TOC op een cd of een FAT op fat32), maar dit is meer programmeer werk, maar met goed programmeer werk is wel wel fail proof, omdat je dan echt alle karakters kan gebruiken (ook de \0)
Ik stink niet, ik ruik gewoon anders
in C en C++ ja, verder niet echtnhimf schreef op 23 april 2003 @ 16:34:
nou de \0 (0x00) is een karakter dat normaal strings afsluit.
dus als je een string hebt "dit is een string"
dan staat dit in het geheugen:
dit is een string\0
Dit noemen ze een null terminated string. Deze is zeer gebruikelijk.
Maar ik zou verder geen \0 in een tekstbestand gaan zetten, daar kunnen sommige implementaties het imho moeilijk mee gaan krijgen bij het inlezen
Wie garandeerd dat? En wat als je 2 windows' enters achter elkaar invoert? Dan staat daar dus ook en \r\nAls je een enter tiept en opslaat in windows codering dan slaat hij 2 karakters op
een \r (carriage return) en een \n (newline)
onder bijv *nix is dit alleen een \n
als je de windows enter omdraait \n\r dan krijg je dus een volgorde die je normaal niet tegen zal komen.
dan zit je weer met die 0Zet jet hier voor en achter nog een null karakter (de \0) dan heb je due \0\n\r\0
Dit is een reeks karakters die je normaal gesproken nooit kan tiepen (ik heb geen toets voor een null karakter op mijn toetsenbord).
ja, in binair kan het weer wel natuurlijkDus heb je een unieke afscheiding, en kan je hierop je strings afscheiden. (moet je wel binair gaan lezen denk ik, weet ik niet zeker)
Maar wat ik zou doen is gewoon jouw eigen scheidingsteken gaan gebruiken, en dan dat scheidingsteken vervolgens in de strings zelf gaan escapen!
Stel je gebruikt een "," als scheidingsteken. Om te voorkomen dat het fout gaat als iemand een "," in z'n string gebruikt, zet je alle ","'s van tevoren om naar "\," (en dan moet je "\" natuurlijk ook omzetten naar "\\" om te voorkomen dat als iemand een "\" gevolgd door een "," gebruikt, dat verkeerd geinterpreteerd wordt
Dit kan natuurlijk met elk teken, en het voorkomt altijd dat de gebruiker per ongeluk op een of andere manier een rare combinatie in die file krijgt die toevallig nou net als jouw scheidingssequence gebruikt wordt
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik heb maar afgezien van een opslagtechniek mbv een scheidingsteken en ga binair verder icm een soort van TOC. Vooral omdat ik zeker wil/moet zijn dat het fool-proof is.
Een scheidingsteken zoals ik voorstelde is foolproof, en je hebt het gemak dat het gewone tekstfiles zijn, en je ze dus gewoon kunt editen
ik gebruik het ook altijd voor config files e.d.
ik gebruik het ook altijd voor config files e.d.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
toch wel erg dat na 50 jaar computing mensen er nog steeds geen standaard is voor een newline
... zet je code anders in XML en gebruik p-tags. Dat doen wij hier (moet je dus wel weer de rest v/d string xml-encoden) maar dat is tenminste standaard (kun je ook dan weer eenvoudig omzetten naar de echt newline / taal). Een TOC (hoe ga je dat doen?) lijkt me ook een beetje overmaat.
Als je weet wat je in je DB steekt kun je het erook uitkrijgen. \0 is een tekstbestand is idd om problemen vragen... Als je helemaal geen data manipulatie moet doen van je strings (dingen like search) kun je nog gaan BLOB-ben maar ik neem aan dat VARCHAR beter geoptimisileerd kan worden (?).
Als je weet wat je in je DB steekt kun je het erook uitkrijgen. \0 is een tekstbestand is idd om problemen vragen... Als je helemaal geen data manipulatie moet doen van je strings (dingen like search) kun je nog gaan BLOB-ben maar ik neem aan dat VARCHAR beter geoptimisileerd kan worden (?).
Full proof is bijvoorbeeld gewoon een @\n als scheider gebruiken en elke @ in de tekst te vervangen met @@. Dus de twee Strings "Bla@\nBla" en "Kwek@@Kwek" worden opgeslagen als "Bla@@\nBla@\nKwek@@@@Kwek". En dit kan altijd teruggelezen worden...
En het is inderdaad in Java zo dat er niet met zero terminated strings wordt gewerkt en er dus gewoon een \0 in een String mag zitten.
En het is inderdaad in Java zo dat er niet met zero terminated strings wordt gewerkt en er dus gewoon een \0 in een String mag zitten.
[ Voor 23% gewijzigd door jvo op 24-04-2003 00:19 . Reden: Aanpassinkje ]
Als je toch met java bezig bent, waarom geen ObjectOutputStream? Erg handig als je niet weet wat je allemaal op gaat slaan. Alleen jammer dat het allemaal serialized moet wordenVerwijderd schreef op 23 April 2003 @ 18:50:
Ik heb maar afgezien van een opslagtechniek mbv een scheidingsteken en ga binair verder icm een soort van TOC. Vooral omdat ik zeker wil/moet zijn dat het fool-proof is.
Pagina: 1