Comment analyser un fichier texte avec C#
Par mise en forme du texte, je voulais quelque chose de plus compliqué.
Au premier abord, j'ai commencé à ajouter manuellement les 5000 lignes du fichier texte je vous pose cette question,dans mon projet.
Le fichier texte a 5000 lignes avec des longueurs différentes.Par exemple:
1 1 ITEM_ETC_GOLD_01 골드(소) xxx xxx xxx_TT_DESC 0 0 3 3 5 0 180000 3 0 1 0 0 255 1 1 0 0 0 0 0 0 0 0 0 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 0 0 0 0 100 0 0 0 xxx item\etc\drop_ch_money_small.bsr xxx xxx xxx 0 2 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 표현할 골드의 양(param1이상) -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx 0 0
1 4 ITEM_ETC_HP_POTION_01 HP 회복 약초 xxx SN_ITEM_ETC_HP_POTION_01 SN_ITEM_ETC_HP_POTION_01_TT_DESC 0 0 3 3 1 1 180000 3 0 1 1 1 255 3 1 0 0 1 0 60 0 0 0 1 21 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 0 0 0 0 100 0 0 0 xxx item\etc\drop_ch_bag.bsr item\etc\hp_potion_01.ddj xxx xxx 50 2 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 120 HP회복양 0 HP회복양(%) 0 MP회복양 0 MP회복양(%) -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx 0 0
1 5 ITEM_ETC_HP_POTION_02 HP 회복약 (소) xxx SN_ITEM_ETC_HP_POTION_02 SN_ITEM_ETC_HP_POTION_02_TT_DESC 0 0 3 3 1 1 180000 3 0 1 1 1 255 3 1 0 0 1 0 110 0 0 0 2 39 -1 0 -1 0 -1 0 -1 0 -1 0 0 0 0 0 0 0 100 0 0 0 xxx item\etc\drop_ch_bag.bsr item\etc\hp_potion_02.ddj xxx xxx 50 2 0 0 2 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 220 HP회복양 0 HP회복양(%) 0 MP회복양 0 MP회복양(%) -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx 0 0
Le texte entre le premier caractère(1) et le deuxième caractère(1/4/5) n'est pas un blanc,c'est un onglet.Il n'y a pas d'espaces dans ce fichier texte.
Ce que je veux:
Je veux obtenir le deuxième entier(Dans les trois lignes que j'ai posté ci-dessus,la deuxième des entiers de 1, 4 et 5) et la chaîne au milieu de chaque ligne indiquant le chemin d'accès(Il commence par "item\" et se termine avec l'extension de fichier ".ddj").
Mon problème:
Quand je google "mise en forme du Texte C#" - tout ce que je reçois est de savoir comment ouvrir un fichier texte et comment écrire un fichier texte en C#.Je ne sais pas comment rechercher du texte dans un fichier texte.Aussi je ne peux pas la recherche pour le premier entier,car dans le cas de son petit entier tel que dans les trois lignes que j'ai posté ci-dessus,je ne vais pas être en mesure de trouver la corrent emplacement,parce que par exemple "1" peut exister dans un emplacement différent.
Ma question:
Il serait le meilleur Si j'écris un programme qui aurait pour effet de supprimer quoi que ce soit,mais ce dont j'ai besoin.
L'autre sens dans mon esprit, c'est de chercher directement à l'intérieur de ce fichier,mais comme je l'ai mentionné ci-dessus - j'aurais peut-être le mauvais emplacement de la deuxième entier si son trop faible.
S'il vous plaît suggérer quelque chose,je ne peux pas formater tout cela à la main.
- "Il n'y a pas d'espaces dans ce fichier texte" pour info: un caractère de tabulation est un espace. Vous vouliez dire "il n'y a pas d'espaces dans ce fichier texte"
- Voici Mon effort: [Analyse d'une Ligne et réglage de la Virgule entre faire un csv chaîne][1] [1]: stackoverflow.com/a/27244009/1147352
Vous devez vous connecter pour publier un commentaire.
OK, voici ce que nous avons à faire: ouvrir le fichier, lire ligne par ligne, et de le diviser par onglets. Puis nous prenons le deuxième entier et boucle à travers le reste à en trouver le chemin.
FileInfo fi = new FileInfo("filename.txt"); StreamReader reader = fi.OpenText();
string[] items = line.Split('\t');
Peut-être que cela a changé dans une version ultérieure .Net.Une autre solution, ce temps faire utiliser des expressions régulières:
Que l'expression est un peu complexe, donc, ici, il est décomposé:
Vous pourriez faire quelque chose comme:
La raison pour laquelle vous ne trouverez pas de résultat lors de la recherche pour "mise en forme" est que l'opération que vous effectuez est appelé 'l'analyse'.
Comme il est déjà mentionné, je vous recommande fortement de l'aide de l'expression régulière (dans le Système.Texte) pour obtenir ce genre de travail.
En combo avec un outil de travail solide, comme RegexBuddy, vous êtes à la recherche à la manutention de tout complexe d'enregistrement de texte d'analyse des situations, ainsi que d'obtenir des résultats rapidement. L'outil en fait, c'est très facile.
Espère que ça aide.
Une façon que j'ai trouvé vraiment utile dans ce genre de situations est d'aller de la vieille école et de l'utilisation du fournisseur OLEDB Jet, avec un schéma.fichier ini pour lire les gros fichiers délimités par des tabulations à l'aide de ADO.Net. Évidemment, cette méthode est vraiment utile uniquement si vous connaissez le format du fichier à importer.
Une fois que vous avez les données dans un format idéal comme un datatable, en filtrant les données dont vous avez besoin devient assez trivial.
Essayer d'expressions régulières. Vous pouvez trouver un certain modèle dans votre texte et de le remplacer avec quelque chose que vous voulez. Je ne peux pas vous donner le code exact pour le moment, mais vous pouvez tester vos expressions à l'aide de ce.
http://www.radsoftware.com.au/regexdesigner/
Vous pouvez ouvrir le fichier et l'utilisation StreamReader.ReadLine pour lire le fichier ligne par ligne. Ensuite, vous pouvez utiliser des chaînes de caractères.Split pour casser chaque ligne en morceaux (utiliser un \t délimiteur) pour extraire la deuxième numéro.
Que le nombre d'éléments est différent, vous devrez rechercher la chaîne pour le modèle de la " item\*.ddj'.
Pour supprimer un élément, vous pouvez (par exemple) garder tout le contenu du fichier dans la mémoire et d'écrire un nouveau fichier lorsque l'utilisateur clique sur "Enregistrer".