Utilisation du travail microframe .NET qui est une version vraiment découpée de C #. Par exemple, System.string a à peine l'une des goodies que nous " J'ai apprécié au fil des ans. P>
J'ai besoin de diviser un document texte en lignes, ce qui signifie diviser par \ r \ n. Toutefois, String.Split ne fournit qu'une division par char, pas par chaîne. p>
Comment puis-je diviser un document en lignes de manière efficace (par exemple, ne pas boucler follement sur chaque caractère dans la doc)? P>
P.s. System.string manque également une méthode de remplacement, de sorte que cela ne fonctionne pas.
P.p.s. Regex ne fait pas partie du microframework non plus. P>
7 Réponses :
Qu'en est-il de: ou p> readind qui . NET Micro Framework 3.0 , ce code peut fonctionner: P> string line = String.Empty;
StreamReader reader = new StreamReader(path);
while ((line = reader.ReadLine()) != null)
{
// do stuff
}
Il se divise par les deux articles dans le Charrayray séparément. Ainsi, vous obtiendrez un tas d'résultats vides en plus des résultats légitimes.
@Angryhacker: removeemptyentries devraient traiter avec eux;
File.Readalllines n'est pas prise en charge non plus.
Voir le lien fourni dans la question de la documentation sur ce qui est pris en charge.
Je voudrais faire boucler chaque caractère dans le document, car c'est clairement nécessaire. Comment pensez-vous Gardez une liste de cordes trouvées jusqu'à présent. Utilisez à plusieurs reprises string.split code> fonctionne? J'essaierais de le faire seulement frapper chaque personnage une fois. P>
indexofof code>, passant dans le décalage en cours dans la chaîne (c'est-à-dire la correspondance précédente + 2). P>
True, mais la mise en œuvre complète de Split (String []) utilise des pointeurs et un code dangereux pour obtenir la performance qu'elle fait. Sinon, je voudrais simplement copier le code. Je travaille sur une puce d'extrémité très basse et j'espérais que quelque chose d'extrêmement intelligent.
Si vous ne divisez que par une seule chaîne de délimitation et que le délimiteur est plus long que 3 caractères, vous pouvez obtenir de meilleures performances en utilisant l'une des variantes d'algorithme de recherche Boyer-Moore. Pas que cela aide le problème de l'affiche, dans ce cas. en.wikipedia.org/wiki/...
Comment puis-je diviser un document en lignes de manière efficace (par exemple, ne pas boucler follement sur chaque caractère dans la doc)? P> blockQuote>
Comment pensez-vous que l'intégré
fractionné code> fonctionne? p>
Il suffit de le réimplémenter comme une méthode d'extension. P>
Vous pouvez faire
string[] lines = doc.Split('\n'); for (int i = 0; i < lines.Length; i+= 1) lines[i] = lines[i].Trim();
Oui, cela fait le tour et conserve la plupart des caractéristiques de performance. Merci. Assez intelligent.
J'étais sur le point de suggérer quelque chose comme ça - battez-moi au coup de poing. Vous devrez peut-être recombiner les chaînes (théoriquement) si '\ n' n'est pas toujours précédée de "\ r" dans l'entrée.
Cela peut aider dans certains scénarios:
StreamReader reader = new StreamReader(file); string _Line = reader.ReadToEnd(); string IntMediateLine = string.Empty; IntMediateLine = _Line.Replace("entersign", ""); string[] ArrayLineSpliter = IntMediateLine.Split('any specail chaarater');
Dans quels scénarios? Pouvez-vous fournir quelques détails s'il vous plaît.
Si vous souhaitez un Microframework compatible em> Fonction fractionnée qui fonctionne pour une chaîne de caractères private static string[] Split(string s, string delim)
{
if (s == null) throw new NullReferenceException();
// Declarations
var strings = new ArrayList();
var start = 0;
// Tokenize
if (delim != null && delim != "")
{
int i;
while ((i = s.IndexOf(delim, start)) != -1)
{
strings.Add(s.Substring(start, i - start));
start = i + delim.Length;
}
}
// Append left over
strings.Add(s.Substring(start));
return (string[]) strings.ToArray(typeof(string));
}
J'ai pensé à la transformer en une méthode d'extension selon Cette possibilité
Vous pouvez diviser votre chaîne avec une sous-chaîne.
String.Split(new string[] { "\r\n" }, StringSplitOptions.None);
Ce n'est pas une version coupée de C #; C'est une version de coupe du .NET Framework.