Quel est le meilleur caractère séparateur/délimiteur pour un fichier de base de données en texte brut?
J'ai envisagé d'utiliser |
, ,
, <TAB>
, ;
, etc. Mais ils semblent tous être possibles pour rompre lorsque les entrées à proximité ont suffisamment de caractères spéciaux.
Alors, utilisateurs de bases de données expérimentés, quel (s) caractère (s) délimiteur (s) suggérez-vous utiliser?
Quel que soit le caractère que vous choisissez comme séparateur, vous souhaiterez échapper à toute occurrence de ce caractère dans vos données.
Peut-être un tilde (~
) ou un caractère ASCII élevé.
Quoi qu'il en soit, s'il y a un risque que cela se glisse dans vos données, vous voudrez bien y échapper avant d'écrire dans votre fichier texte.
Je pense que la meilleure façon de joindre la chaîne avec un trois cerises '@@@'.
Eh bien, il existe peu de séparateurs caractères en US-ASCII, hex 1c
, 1d
, 1e
et 1f
. Le texte en clair ne devrait pas les contenir.
1c FS ␜ ^\ File Separator
1d GS ␝ ^] Group Separator
1e RS ␞ ^^ Record Separator
1f US ␟ ^_ Unit Separator
Pour une situation d'entreposage de données particulière où nous contrôlions le fichier source, mais échappions et qualifications s'avéraient coûteuses, nous avons été en mesure de décider de l'entreprise d'un caractère étendu ASCII serait supprimé des données (le cas échéant). qu’il n’a pas).
Lors de la création du fichier source délimité, nous avons supprimé toutes les occurrences de (alt + 219) dans les données et avons utilisé ce caractère pour le délimiteur. Bonus, ce personnage est vraiment facile à repérer.
Vous pouvez utiliser les caractères de séparation spéciaux (hex 1c -> 1f), mais ils ne sont pas imprimables et certaines technologies ont des problèmes de traitement des données les contenant.
Donc, plan B, si vos données sont en UTF-8, vous pouvez choisir un caractère aléatoire UTF-8 dont il est très peu probable que extrêmement apparaisse dans les données source que vous recevez.
Cependant, même dans ce cas, si vous voulez être sûr de ne pas rencontrer de problèmes, vous devez toujours analyser tout votre jeu de données à la recherche de ce caractère et, s'il apparaît, choisissez simplement un autre caractère UTF-8.
J'ai tendance à haïr l'encapsulation avec passion et à l'éviter autant que possible, comme expliqué dans mon post sous le chapitre "encapsulation" ici: https://theonemanitdepartment.wordpress.com/2014/12/15/the-absolute- minimum-tout-le-monde-travaillant-avec-les-données-absolument-positivement-incontournables-types-fichiers-encodage-délimiteurs-et-types-données-sans excuses/
Personnellement, j'aime bien utiliser «comme caractère de délimitation pour fractionner les données dans des fichiers CSV. Je ne pense pas avoir jamais trouvé une instance naturelle de« et »personnellement.
Si vous avez l'option d'une chaîne comme séparateur de colonne, utilisez "" comme séparateur. Vous pouvez composer n'importe quelle ficelle et vous donner de la flexibilité.
Je préfère généralement les caractères non imprimables tels que "\ u0001". Je l'utilise par exemple comme séparateur de colonne dans la plupart de mes scripts U-SQL Azure Data Analytics. En supposant que vous puissiez utiliser un délimiteur personnalisé multi-caractères
J'avais déjà utilisé un convertisseur ePUB et le caractère de délimitation était le caractère de citation notionnel. Partout où il avait été utilisé, il serait réécrit dans un fichier @, simple mais efficace même s'il détruisait le matériel échantillon produit.
Si vous ne pouvez pas contrôler les données qui y sont insérées, n'utilisez pas de base de données en texte brut. Il ne peut y avoir aucune bonne réponse généralement ici. Sans contexte ni contraintes, cette question est fausse.
À savoir: Si je disais que je n'accepterai que les minuscules comme données, je pourrais utiliser n'importe quel autre symbole comme séparateur. Même, disons, le chiffre 9 et tout irait bien. Aucun symbole autre qu'un caractère minuscule ne serait meilleur qu'un autre.
Inversement, si je pouvais accepter n'importe quel caractère, il ne me resterait plus de caractères pour un séparateur et il me resterait une base de données très désolée qui ne pourrait stocker qu'une seule valeur.
Si vous devez essayer trop d'obtenir votre base de données en texte brut, vous voulez probablement une base de données binaire. Avez-vous regardé sqlite? Il est très facile à utiliser, il est disponible dans de nombreux contextes et comporte de nombreux avantages par rapport à une base de données en texte brut.