Toon posts:

[C/Linux] Vreemd karakter bij omzetting DBF->CSV

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleempje,

Ik heb een programma geschreven dat een DBF bestand in een MySQL database zet. Hiervoor gebruik ik een extern programma (dbf) welk ik met apt-get heb geinstalleerd (heb weinig verstand van linux, geen idee of het iets uitmaakt). Nu krijg ik uit een (belachelijk) grote DBF tabel een vreemd karakter in de uitvoer:

klikbaar:
Afbeeldingslocatie: http://img36.exs.cx/img36/3131/wtf7.jpg
3 keer raden welk karakter ik bedoel...

Op de plek van zo'n karakter kapt mijn programma de regel af, waardoor ik data mis. Ik heb alleen geen flauw idee wat het voor iets is. Het karakter kan geselecteerd worden, gewist worden, maar niet verplaatst/gecopy paste worden.
In Scite laat ie dat karakter zien. Screem haalt random delen uit de regel :? en bluefish kapt, net als mijn programma op de eerst voorkomende plek de regel af.
Heeft iemand misschien een idee hoe ik hier vanaf kom?

[ Voor 11% gewijzigd door Verwijderd op 05-07-2004 15:45 ]


Verwijderd

Als je die [nul] karakters bedoeld, waarschijnlijk staan er dan [nul] (ascii code 0) characters in je bestand. Eigenlijk niet zo fijn om in een csv bestand te stoppen. Oorzaak zit dus in je conversie routine waar je dit soort zaken zou moeten omzetten naar een equivalent voor ASCII 0, die mysql begrijpt. Sommige DB's verwachten hiervoor bv. een ?, andere weer een totaal lege waarde.

[ Voor 8% gewijzigd door Verwijderd op 05-07-2004 10:04 ]


Verwijderd

Topicstarter
Verwijderd schreef op 05 juli 2004 @ 10:02:
Als je die [nul] karakters bedoeld, waarschijnlijk staan er dan [nul] (ascii code 0) characters in je bestand. Eigenlijk niet zo fijn om in een csv bestand te stoppen. Oorzaak zit dus in je conversie routine waar je dit soort zaken zou moeten omzetten naar een equivalent voor ASCII 0, die mysql begrijpt. Sommige DB's verwachten hiervoor bv. een ?, andere weer een totaal lege waarde.
Dat was het eerste waaraan ik dacht. Maar op die plekken in het bestand staat helemaal geen [nul] characters in de database. DBF kent zover ik weet niet eens iets dergelijks.

edit: ik heb die conversieroutine dus niet geschreven. Daarvoor heb ik het externe programma dbf gebruikt, zoals eerder aangegeven.

[ Voor 11% gewijzigd door Verwijderd op 05-07-2004 10:09 ]


Verwijderd

Verwijderd schreef op 05 juli 2004 @ 10:08:
[...]


Dat was het eerste waaraan ik dacht. Maar op die plekken in het bestand staat helemaal geen [nul] characters in de database. DBF kent zover ik weet niet eens iets dergelijks.

edit: ik heb die conversieroutine dus niet geschreven. Daarvoor heb ik het externe programma dbf gebruikt, zoals eerder aangegeven.
tsja, dbf is voor mij alweer een tijdje terug maar dacht idd dat die geen null waarde ondersteunde maar jij bent de enige hier die kan zien wat er wel zou moeten staan op die plek. Ik zou zeggen kijk eens in een dbf bestand om te kijken wat er op die plaats van die null waardes zou moeten staan. Misschien een veld waar die conversie routine geen raad mee weet (memo b.v.).

Heb je btw dbf2mysql gebruikt, op sourceforge staat het volgende hierover:
XBase File to MySQL conversion and vice versa. ATTENTION: This project is no longer maintained. There's another brand of the same code uploaded to MySQL.COM Check it out there. If you want to use it anyway, co the cvs, the releases are bogus.

[ Voor 18% gewijzigd door Verwijderd op 05-07-2004 10:15 ]


Verwijderd

Topicstarter
Verwijderd schreef op 05 juli 2004 @ 10:11:
[...]


tsja, dbf is voor mij alweer een tijdje terug maar dacht idd dat die geen null waarde ondersteunde maar jij bent de enige hier die kan zien wat er wel zou moeten staan op die plek. Ik zou zeggen kijk eens in een dbf bestand om te kijken wat er op die plaats van die null waardes zou moeten staan. Misschien een veld waar die conversie routine geen raad mee weet (memo b.v.).
Het zijn gewoon integer en string velden. In de csv worden alle velden gescheiden door "_". Op het plaatje kun je dus zien dat de allereerste [nul] character BIJ de integer waarde 2 in het veld zit...
Verwijderd schreef op 05 juli 2004 @ 10:11:
Heb je btw dbf2mysql gebruikt, op sourceforge staat het volgende hierover:
Ik zal es kijken. Bedankt alvast.

[ Voor 20% gewijzigd door Verwijderd op 05-07-2004 10:20 ]


Verwijderd

Verwijderd schreef op 05 juli 2004 @ 10:17:
[...]
Het zijn gewoon integer en string velden. In de csv worden alle velden gescheiden door "_". Op het plaatje kun je dus zien dat de allereerste [nul] character BIJ de integer waarde 2 in het veld zit...
Lijkt erop dat die conversie routine integers (en bij decimals, de decimalen) exporteert met 10 tekens, deze info staat waarschijnlijk niet in de dbf en vult hij ze aan met [nul]. Foutje in die conversie routine dus ....

Verwijderd

Topicstarter
Verwijderd schreef op 05 juli 2004 @ 10:28:
[...]

Lijkt erop dat die conversie routine integers (en bij decimals, de decimalen) exporteert met 10 tekens, deze info staat waarschijnlijk niet in de dbf en vult hij ze aan met [nul]. Foutje in die conversie routine dus ....
Ik heb die conversie routine al voor ~15 tabellen gebruikt, werkte vlekkeloos... Daarom vond ik het ook al extra vreemd. Dbf2mysql kan ik niet vinden op mysql.com, ik zal es op sf kijken voor die "verouderde" versie.

Edit: Je hebt gelijk. Hij vult de integer en decimale velden op met [nul] karakters tot het gedefinieerde aantal decimalen/lengte is bereikt. Hoewel ik het nog altijd vreemd vind dat ie het alleen bij deze tabel doet ... Het enige verschil is dat deze IETS meer velden heeft dan gemiddeld ... 201 Velden... :X
het aanmaken in PhpMyAdmin was leuk.......

[ Voor 37% gewijzigd door Verwijderd op 05-07-2004 11:47 ]


Verwijderd

Topicstarter
Lijkt me dat het ook mogelijk is om hier in C overheen te lezen. Alleen hoe? Iemand een idee?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 00:58
Misschien een idee om gewoon alle 0-karakters eruit te flikkeren?

edit:
col filtert bijvoorbeeld alle vage control characters uit z'n invoer. Aangenomen dat je verder geen rare dingen als backspaces of bell characters in je bestand hebt staan zou dat wel moeten werken.

[ Voor 63% gewijzigd door Soultaker op 05-07-2004 17:21 ]


Verwijderd

Topicstarter
Soultaker schreef op 05 juli 2004 @ 17:18:
Misschien een idee om gewoon alle 0-karakters eruit te flikkeren?

edit:
col filtert bijvoorbeeld alle vage control characters uit z'n invoer. Aangenomen dat je verder geen rare dingen als backspaces of bell characters in je bestand hebt staan zou dat wel moeten werken.
Thanks a million dude :). Werkt.
Pagina: 1