Avatar billede homsabu Nybegynder
01. marts 2006 - 17:18 Der er 18 kommentarer og
1 løsning

Find String og gem tegn i variabel

Hey!

Jeg vil forklare hvad jeg skal bruge med følgende eksempel...

dette er f.eks. min string : "her er en lille historie om START en bjørn STOP som går en START tur STOP i skoven"
jeg skal så bruge en funktion der finder alle START (og STOP) og gemmer hvad der står derimellem (dvs 'en bjørn' og 'tur') i hver sin variabel(/array... for der er et ukendt antal start/stop)...

Jeg har ingen idé om hvor svært dette er og om det kan lade sig gøre?!
Avatar billede nielle Nybegynder
01. marts 2006 - 17:39 #1
Du kan starte med at kigge på denne stump kode:

using System;
using System.Text.RegularExpressions;

namespace e691908
{
    class Program
    {
        static void Main(string[] args)
        {
            string  dinTekst = "her er en lille historie om START en bjørn STOP som går en START tur STOP i skoven";

            Regex r = new Regex(@"START\s*(?<ord>.*?)\s*STOP");
            Match m = r.Match(dinTekst);
            while (m.Success)
            {
                Console.WriteLine(m.Groups["ord"].Value);
                m = m.NextMatch();
            }
        }
    }
}
Avatar billede nielle Nybegynder
01. marts 2006 - 17:40 #2
Kan du ikke uddybe lidt hvordan du ønsker at gemme resultaterne?
Avatar billede homsabu Nybegynder
01. marts 2006 - 17:46 #3
alle resultater skal gemmes i en MySQL database... dvs én record hvor der står 'en bjørn' og én med 'tur' osv...
Avatar billede nielle Nybegynder
01. marts 2006 - 17:53 #4
Så er det jo bare at rette i det indre af while-løkken sådan at den - i stedet for at skrive ud - danner en SQL-sætning og udføre den.

while (m.Success)
{
    string sql = string.Format("INSERT INTO dinTabel (ditFelt) VALUES ('{0}')", m.Groups["ord"].Value);
    Console.WriteLine("Udfør denne SQL-sætning: " + sql);
    m = m.NextMatch();
}
Avatar billede homsabu Nybegynder
01. marts 2006 - 19:20 #5
okay... jeg får lige en fejl - har umiddelbart ikke noget med dette her at gøre - men kan du/i svare alligevel??

den skriver "'System.Windows.Forms.Control.text' is inaccessible due to its protection level" (og referer til en textBox3.text...??)
Avatar billede nielle Nybegynder
01. marts 2006 - 19:31 #6
Jeg må nok se lidt mere kode hvis jeg skal kunne svare på den :^)
Avatar billede homsabu Nybegynder
01. marts 2006 - 19:34 #7
whut?! har intet ændret, blot compilet igen... og nu siger den det ikke... nå... :-) måske en fejl 40... :-)

Nå, men til gengæld START og STOP udskiftes med nogle variable, så man kan indtaste betingelserne i textbox'e?!
Avatar billede homsabu Nybegynder
01. marts 2006 - 19:35 #8
vrøvle sætning når der mangler et 'kan'

Nå, men til gengæld ____KAN____ START og STOP udskiftes med nogle variable, så man kan indtaste betingelserne i textbox'e?!
Avatar billede nielle Nybegynder
01. marts 2006 - 19:41 #9
Ja da:

string startBetingelse = "START";
string stopBetingelse = "STOP";

Regex r = new Regex(startBetingelse + @"\s*(?<ord>.*?)\s*" + stopBetingelse);

Her har jeg hardkodet værdierne til START og STOP, men du kan jo bare hente dem fra tekst felter hvis det er det du ønsker.
Avatar billede homsabu Nybegynder
01. marts 2006 - 19:45 #10
super! du har løst alle mine problemer! ;-)

smid et svar - og pointene er dine ...
Avatar billede nielle Nybegynder
01. marts 2006 - 19:46 #11
Svar :^)
Avatar billede homsabu Nybegynder
01. marts 2006 - 20:25 #12
hmmm... nu ser min kode sådan her ud;
----------------
        private void button2_Click(object sender, System.EventArgs e)
        {
            WebRequest wr = WebRequest.Create(textBox1.Text);
            string html = new StreamReader(wr.GetResponse().GetResponseStream()).ReadToEnd();
            textBox2.Text = html;
            string startBetingelse = textBox3.text;
            string stopBetingelse = textBox4.text;
           
            Regex r = new Regex(startBetingelse + @"\s*(?<ord>.*?)\s*" + stopBetingelse);
            Match m = r.Match(html);
            while (m.Success)
            {
                //textBox5.AppendText = m.Groups["ord"].Value;
                m = m.NextMatch();
            }
        }
-------------

men så melder den den der fejl igen --> "'System.Windows.Forms.Control.text' is inaccessible due to its protection level" ... og refererer til textbox3 og 4... ?!
Avatar billede nielle Nybegynder
01. marts 2006 - 20:31 #13
Det skal vel være:

textBox3.Text;

- i stedet for:

textBox3.text;

C# er case-sensitiv.
Avatar billede homsabu Nybegynder
01. marts 2006 - 20:38 #14
ARGH!... sådan nogle små fejl er til at gå amok over!!! ;-)

tak for det!!!
Avatar billede homsabu Nybegynder
01. marts 2006 - 21:27 #15
hmm... den har lidt problemer med hvis der er linie skift i den string man undersøger... er det noget du umiddelbart har en løsning på?? Så vidt jeg kan teste mig frem til opstår fejlen når der er et linieskift i den string den får mellem START- og STOP-betingelserne...
Avatar billede homsabu Nybegynder
01. marts 2006 - 21:31 #16
eksempel... hvis html =
----
</div>
</body>
</html>
----
hvis START = "</div>" og SLUT = "</html>", giver den resultatet </body>... MEN...
hvis nu START = "</di" og SLUT = "</html>", så giver den intet resultat!
Avatar billede nielle Nybegynder
01. marts 2006 - 21:58 #17
Regex r = new Regex(startBetingelse + @"\s*(?<ord>.*?)\s*" + stopBetingelse, RegexOptions.Singleline)
Avatar billede homsabu Nybegynder
01. marts 2006 - 22:07 #18
det ser ud til at løse problemet!!! super!!

TAK IGEN! ;-)
Avatar billede nielle Nybegynder
01. marts 2006 - 22:12 #19
:^)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester