Avatar billede keenkbh Nybegynder
11. november 2006 - 17:43 Der er 7 kommentarer og
1 løsning

Split af ord fra tekst fil

Hej.

Jeg har et lille problem, eller ved ikke om det er et lille problem, men here goes.

Jeg henter informationer fra en tekstfil med følgende kode:

TextReader tr = new StreamReader(Server.MapPath("1-11-2006-35359490.txt"), Encoding.Default);
   
string line;
   
while ((line = tr.ReadLine()) != null)
{
  string[] parts = line.Split(";".ToCharArray());
  Response.Write(parts[0]);
  Response.Write(" ");
  Response.Write(parts[2]);
  Response.Write("<br>");
}

Response.writes er bare for at tjekke om det er rigtigt putput.

Det er ordet i parts[2] der skal deles op. Hvis vi siger, at ordet er 'BundAsus' eller 'TastaturLogitech'.

Jeg vil gerne have lavet det sådan, at ordet bliver delt op ved det store bogstav i midten, da det forreste "bundt" skal bruges til opslag i db senere hen.
Avatar billede thesurfer Nybegynder
11. november 2006 - 18:15 #1
Nemt nok:
Check ASCII koden for hvert eneste bogstav (i en loop)..
Hvis koden ligger mellem 65 og 90, er det store bogstaver..

Du skal nok lige finde ud af, hvor ÆØÅ ligger..
Avatar billede thesurfer Nybegynder
11. november 2006 - 18:17 #2
Du skal vist bruge char..
Avatar billede thesurfer Nybegynder
11. november 2006 - 18:20 #3
Noget der ligner det her fra http://www.experts-exchange.com/Programming/Programming_Languages/C_Sharp/Q_20889151.html :

private bool CharIsNumeric(char c)
{
    int charCode = Convert.ToInt32(c);
    if(charCode > 47 && charCode < 58)
          return true;
    else
          return false;
}

Men her checker de om det er tal (som ligger mellem 47 og 58)..
Avatar billede thesurfer Nybegynder
11. november 2006 - 18:25 #4
Muligvis det skal bruge ( http://geekswithblogs.net/timh/archive/2006/05/25/79561.aspx ):

  string text = "0 a+&#8230;&#8221;";
  foreach (char c in text)
  {
      Console.WriteLine("{0} U+{1:x4} {2}", c, (int)c, (int)c);
  }
Avatar billede thesurfer Nybegynder
11. november 2006 - 18:42 #5
Fungerende C# eksempel:

        static void Main(string[] args)
        {
            string[] ba = hentOplysninger("BundAsus");
            Console.WriteLine("Hardware: {0}, Navn: {1}", ba[0], ba[1]);

            string[] tl = hentOplysninger("TastaturLogitech");
            Console.WriteLine("Hardware: {0}, Navn: {1}", tl[0], tl[1]);

            Console.ReadLine();
        }

        private static string[] hentOplysninger(string text)
        {
            string tmp = text.Substring(1); // fjern det første bogstav, som er stort
            string hardware = ""; // kommer til at indeholde "Bund" eller "Tastatur"
            string navn = ""; // kommer til at indeholde "Asus" eller "Logitech"
            int kode = -1; // kommer til at indeholde koden for bogstavet
            foreach (char c in tmp)
            {
                kode = (int)c;
                if (kode >= 65 && kode <= 90) break;
                hardware += c; // tilføj bogstavet til strenge "hardware"
            }
            hardware = text.Substring(0, 1) + hardware; // indsæt det første bogstav fra "text"
            navn = text.Substring(hardware.Length); // hent tekst fra position "længden af indholdet af hardware" fra den originale tekst
            text = hardware + ";" + navn; // sæt væriderne op så vi kan splitte dem
            string[] udskrift = text.Split(";".ToCharArray()); // split til streng-array
            return udskrift; // returner streng-arrayen
        }


Du skal lige rette det til, med static osv.. så virker det også hos dig..
Avatar billede keenkbh Nybegynder
11. november 2006 - 23:55 #6
tak for hurtig respons. Jeg kigger lige på det i morgen, men det ser i hvert fald ud til at være det jeg skal bruge. Tak for hjælpen. Jeg vender tilbage hvis jeg slet ikke kan finde ud af det. ;-)
Avatar billede keenkbh Nybegynder
12. november 2006 - 16:55 #7
Jeg har lige et tillægsspørgsmål: Hvordan kan det så arrangeres, hvis der nu er nogle af ordene, som skal splittes der hedder: RAMkingston eller PSUnoget eller HDDhitachi?
Avatar billede thesurfer Nybegynder
13. november 2006 - 01:27 #8
Så skal du til at lave en ordliste med nøgleord, til alt hardwaren..

Dvs, en liste der indholder nøgleordene på et given format..

Eksempel: "RAM,PSU,HDD,Tastatur,Bund"

Det vil blive lidt bøvlet.. Man skal så checke om tegn "0" til tegn "ukendt position" er lig nogen af nøgleordene (f.eks. "RAM")..

Man kunne også vælge at erstatte værdien nøgleordet med ingenting, med brug af case-sensitive (dvs, forskel på store/små bogstaver, se eksempel nederest), og derefter sammenligne det originale ord med det erstattede..

Men så må man bare håbe, at en producent ikke indeholder nøgleordet, i samme case..
Dvs, ordet "HDDRAMMSTEIN" (nøgleord ="hdd", producent = "rammstein") ville slå fejl.. med mindre at man sørger for, at det er fra position 0, at der erstattes..


Det nemmeste ville nok være, at dele ordret op i din liste/database/excel-fil, så det altid ser sådan ud..

Eksempel med deling/delimiter ved "_": hardware_producent

På den måde vil det være meget nemt at skille ordret ad..


Eksempel på case-sensitive: "Test" er forskellig fra "tEst", "teSt" og "tesT".
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
Kurser inden for grundlæggende programmering

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