du bliver noedt til at laese HVER karakter... indtil du moeder et space. Lidt omsonst, men saadanne er det. Hvis du skal aendre et eller andet saa skal du foerst selectere det, og derefter kan du aendre dets attributter. Jeg ved at det intet med det har at goere, men det er noget jeg selv har haft boevl med
jeg og en anden har siddet og haft noejagtig det samme problem som dig. Vi har ogsaa revet vores haar ud over at der ikke findes en bedre maade. Jeg tror dog ikke at microsoft har sovet i timen, de har bare ikke lagt disse funktionaliteter ind. Hvis alle disse ting er til stede:
1) Du virkelig skal processere en masse tekst 2) Brugeren behoever ikke se det. 3) Tiden er ikke den vigtigste faktor. 4) Du vil have et nemmere interface til at behandle teksten.
Saa foreslaar jeg at du opretter en instans af word, og laegger RTF dokumentet derind i. Herinde har du rige muligheder for alskens ting, samtidig med at du har poweren fra .NET.
//Bryd teksten op i en streng før markøren og en efter string stringBefore = rtb.Text.Substring(0, rtb.SelectionStart); string stringAfter = rtb.Text.Substring(rtb.SelectionStart);
//Find positionerne af hhv. sidste og første ' ' i de to strenge int indexBefore = stringBefore.LastIndexOf(' '); int indexAfter = stringAfter.IndexOf(' ');
//Find de to ord string wordBefore = stringBefore.Substring(indexBefore); string wordAfter = stringAfter.Substring(0, indexAfter);
Eller endnu bedre da du sparer to kald til Substring:
//Find positionerne af hhv. sidste og første ' ' i de to strenge int indexBefore = rtb.Text.LastIndexOf(' ', 0, rtb.SelectionStart); int indexAfter = rtb.Text.IndexOf(' ', rtb.SelectionStart);
//Find de to ord string wordBefore = rtb.Text.Substring(indexBefore); string wordAfter = rtb.Text.Substring(0, indexAfter);
Ahhh, jeg implementerer en allerede eksisterende funktion. Ikke desto mindre, vil du nok skulle - med den nye smartere funktion - skulle bruge IndexOfAny ogsaa soege paa "End of line" og space, da ordet jo sagtens kan vaere i starten af en linie. Ydermere er der de to ord som ligger i slutningen og i starten som du skal finde en smart metode til at finde(evt. indsaette space i slutningen og i starten inden du soeger, og bagefter slette dem igen)
Gooky>> Jeg kan godt se EOF problematikken, men den kan som du selv foreslår så løser IndexOfAny det elegant:
//Find positionerne af hhv. sidste og første ' ' i de to strenge char[] matchChars = new char[]{' ', '\n'}; int indexBefore = rtb.Text.LastIndexOfAny(matchChars, 0, rtb.SelectionStart); int indexAfter = rtb.Text.IndexOfAny(matchChars, rtb.SelectionStart);
Det er rigtigt at som publicperson beskriver det er han interesseret i ordet hhv. lige før og lige efter markørens position. Han forstæller ikke hvordan vi skal håndtere det hvis vi står midt i et ord. Skal det ord vi står i med, skal det være wordBefore eller wordAfter eller skal vi finde ordet lige før det ord og ordet lige efter det ord vi står i. Alle scenarierne kan løses med simpel streng manipulation, men jeg gider ikke lave algoritmen før publicperson svarer :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.