Avatar billede juks Novice
27. november 2007 - 06:50 Der er 24 kommentarer og
1 løsning

array giver ikke rigtigt resultat.

public static ArrayList GetALLskytterNOTin(string cpr)
        {
            using (MyReader SR = new MyReader(GlobalVariables.Instance.sti.ToString() + GlobalVariables.Instance.skytte.ToString()))
            {
                ArrayList gsnin = new ArrayList();
                string Line, Line1, Line2, Line3, Line4;
              while ((Line = SR.ReadLine()) != null)
                {
                    Line1 = Line.Split(',')[0];
                    Line2 = Line.Split(',')[1];

                    Line3 = Getklub.Gklub(Line.Split(',')[2]);
                    Line4 = Getklub.Gklasse((Line.Split(',')[3]));
                if (Line1 != cpr)
                    {


                        gsnin.Add(Line1 + "," + Line2 + "," + Line3 + "," + Line4);
                    }
                }

                return gsnin;





----------------------Kaldes her------------med en rækker cprnr , men jeg får alle retur også dem jeg prøver at fra sortere med !=

  ArrayList al1 = cprnr.Gcpr(ss);
                for (int i = 0; i < al.Count; i++)
                {
                    object tt = 0;
                    tt = (al1[i]);
                    string str = Convert.ToString(tt);

                    ArrayList gsnin = cprnr.GetALLskytterNOTin(str);

                    for (int j = 0; j < gsnin.Count; j++)


                        this.checkedListBox3.Items.Add(gsnin[j]);
                }
Avatar billede juks Novice
27. november 2007 - 08:15 #1
tror problemet ligger i denne her ..
while ((Line = SR.ReadLine()) != null)

men kan ikke se mig ud af hvordan jeg kun skal køre det igennem een gang så den ikke kommer med dubbleter
Avatar billede nielle Nybegynder
27. november 2007 - 08:20 #2
Nej, hvis alle kommer med såp er det fordi at der er et eller andet galt med antagelsen om hvad der er i Line1 på det tidspunkt du sammenligner den med cpr.

Prøv med lidt debug udskrivning:


            if (Line1 != cpr)
            {
                Console.WriteLine("DEBUG: Line1=[{0}] og cpr=[{1}]", Line1, cpr);
                gsnin.Add(Line1 + "," + Line2 + "," + Line3 + "," + Line4);
            }
Avatar billede md_craig Nybegynder
27. november 2007 - 08:28 #3
Utrolig uigennemskuelig kode.

Line1, Line2, Line3???... hvad er der i hver?
Kontinuerlige kald til split og derefter direkte tilgåen arrayet er både performance synk samt uoverskeuelig...
Hvorfor ikke List<string> istedet for ArraýList? (er det .NET 1.1)...

Jeg går ud fra at de forskellige linier læses ind fra et eller andet sted?... du bør kraftigt overveje (eller jeg vil faktisk sige du bør gøre det!)... at inlægge noget foretnigs logik og minimum et "Skytte" object... ala:

public class Skytte
{
  private string navn;
  private string klub;
  private string klasse;
  private string cpr; 

  public string Navn
  {
    get { return this.navn; }
    set { this.navn = value; }
  }

  public string Klub
  {
    get { return this.navn; }
    set { this.navn = value; }
  }

  public string Klasse
  {
    get { return this.navn; }
    set { this.navn = value; }
  }

  public string Cpr
  {
    get { return this.navn; }
    set { this.navn = value; }
  }

  public Skytte(string pNavn, string pKlub, string pKlasse, string pCpr)
  {
    this.navn = pNavn;
    this.klub = pKlub;
    this.klasse = pKlasse;
    this.cpr = pCpr;
  }

  public static Skytte CreateFromLine( string inputLine )
  {
    string[] values = inputLine.Split(',');
    return new Skytte( values[1], values[2], values[3], values[0] );
  }
}

brug:

//Gennering af listen ud fra en komma sepereret fil eller et listview? eller andet????
public List<Skytte> GetAll()
{
  //... Reader setup ect.
  string line = string.Empty;
  List<Skytte> skytter = new List<Skytte>();
  while ((line = SR.ReadLine()) != null)
  {
    skytter.Add( Skytte.CreateFromLine( line ) );
  }
  return skytter;
}

(Senere hen er klub og klasse gode potentielle klasser også)
(fortsætter lige senere, da jeg skal til kursus nu)
Avatar billede nielle Nybegynder
27. november 2007 - 08:33 #4
Bortset fra det så synes jeg (som vist nævnt tidligere) at du skal indføre en Person klasse.

class Person
{
    // Du kan sikkert finde på nogle bedre navne?
    public string cpr
    public string line2:
    public string line3;
    public string line4;

    public Person(string personStr)
    {
        cpr = personStr.Split(',')[0];
        line2 = personStr.Split(',')[1];
        line3 = Getklub.Gklub(personStr.Split(',')[2]);
        line4 = Getklub.Gklasse(personStr.Split(',')[3]);
    }

    public override string ToString()
    {
        return cpt + "," + line2 + "," + line3 + "," + line4;
    }
}

Hvis du så også benytter en List<Person> i stedet for ArrayList, kunne din ændrede kode se sådan her ud:

public static List<Person> GetALLskytterNOTin(string cpr)
{
    using (MyReader SR = new MyReader(GlobalVariables.Instance.sti.ToString() + GlobalVariables.Instance.skytte.ToString()))
    {
        List<Person> gsnin = new List<Person>();

        string line;
        while ((line = SR.ReadLine()) != null)
        {
            Person person = new Person(line);
            if (person.cpr != cpr)
            {
                gsnin.Add(person);
            }
        }

        return gsnin;
Avatar billede juks Novice
27. november 2007 - 08:34 #5
jeg skal aflevere om 3 timer , vil stadig gerne høre nærmere
Avatar billede nielle Nybegynder
27. november 2007 - 08:35 #6
... ikke helt ulig det som md_craig har lavet ovenfor. Men han kender vist betydeliget mere til den konkrete problemstilling end jeg gør. ;^)
Avatar billede nielle Nybegynder
27. november 2007 - 08:36 #7
Hvis du ikke har tid til at refaktorere din kode, så synes jeg at du skal starte med det jeg skrev i 27/11-2007 08:20:57.
Avatar billede juks Novice
27. november 2007 - 08:47 #8
der er cprrn fra min txtfil . skal sortere dem fra jeg har listet i en anden list.
men problemet er jo lidt at når den så søger i gennem 2. gang så har den jo "glemt" at den har søgt på det første cprn også tager den , den jo med igen :-(
Avatar billede juks Novice
27. november 2007 - 08:48 #9
jeg har nogle cprnr numre i en listbox6 og de skal ikke med i min listbox3 , hvis de allrede står i listbox6.

så skal den kun tage de andre i filen ...
Avatar billede nielle Nybegynder
27. november 2007 - 09:03 #10
Så skal du jo sende alle cpr-numrene med til den som frasortere:

public static ArrayList GetALLskytterNOTin(string[] cprFrasorteres)
{
    using (MyReader SR = new MyReader(GlobalVariables.Instance.sti.ToString() + GlobalVariables.Instance.skytte.ToString()))
    {
        ArrayList gsnin = new ArrayList();
        string Line, Line1, Line2, Line3, Line4;
        while ((Line = SR.ReadLine()) != null)
        {
            Line1 = Line.Split(',')[0];
            Line2 = Line.Split(',')[1];

            Line3 = Getklub.Gklub(Line.Split(',')[2]);
            Line4 = Getklub.Gklasse((Line.Split(',')[3]));

            bool skalFrasorteres = false;
            foreach (string cpr in cprFrasorteres)
            {
                if (Line1 == cpr)
                    skalFrasorteres = true;
            }

            if (! skalFrasorteres)
            {
                gsnin.Add(Line1 + "," + Line2 + "," + Line3 + "," + Line4);
            }
        }

        return gsnin;
Avatar billede nielle Nybegynder
27. november 2007 - 09:05 #11
... og den kan effektiviseres lidt:

            foreach (string cpr in cprFrasorteres)
            {
                if (Line1 == cpr)
                {
                    skalFrasorteres = true;
                    break;
                }
            }
Avatar billede juks Novice
27. november 2007 - 09:16 #12
jeg finder alle min cprnr på denne måde..

ArrayList al = cprnr.Gcpr(ss);
                for (int i = 0; i < al.Count; i++)
                {
                    object tt = 0;
                    tt = (al[i]);
                    string str = Convert.ToString(tt);

                    ArrayList gs = cprnr.Getskytte(str);

                    for (int j = 0; j < gs.Count; j++)


                        this.listBox6.Items.Add(gs[j]);
Avatar billede juks Novice
27. november 2007 - 09:19 #13
kunne jeg ikke bare liste dem ind på en måde ?
Avatar billede nielle Nybegynder
27. november 2007 - 09:53 #14
Du bliver nødt til at lave en liste over dem som ikke skal med. Den bliver du nødt til at sende til den funktion som skal vise alle de andre - det skal du gøre efter det princip jeg har demonstreret i 27/11-2007 09:03:50.

Det er den måde du gør det på hvis ændringerne i din nuværende kode skal holdes til et minimum.
Avatar billede juks Novice
27. november 2007 - 10:00 #15
ok takker
Avatar billede juks Novice
27. november 2007 - 10:02 #16
men jeg mente nu også at alle dem jeg ikke skal have med er i dette array


ArrayList al = cprnr.Gcpr(ss);
                for (int i = 0; i < al.Count; i++)
                {
                    object tt = 0;
                    tt = (al[i]);
                    string str = Convert.ToString(tt);

                    ArrayList gs = cprnr.Getskytte(str);

                    for (int j = 0; j < gs.Count; j++)
------------

Derfor jeg ville kalde GetALLskytterNOTin(cprFrasorteres)
derfra kunne bare ikke få den til at godtage mit min string
Avatar billede nielle Nybegynder
27. november 2007 - 10:12 #17
Du bliver desværre nødt til at smide noget af din nuværende kode helt væk - du kan ikke bare blive ved med at rette på den hvis grundtanken bag koden er forkert.

Hvis du ønsker en list hvorfra at nogle (ikke bare et enkelt) cpr-nummer er fjernet. Så bliver du først nødt til at lave en liste over alle dem som skal fjernes. Denne liste skal så sendes til den funktuion som giver dig de resterende cprnumre. Det er det princip jeg har vist i 27/11-2007 09:03:50.
Avatar billede juks Novice
27. november 2007 - 10:29 #18
jeg finder en løsning
Avatar billede nielle Nybegynder
27. november 2007 - 18:29 #19
Et par råd til din kode:

1) Vælg nogle mere sigende navne for dine variable. Hvis "Line1" i virkeligheden er et cpr-nummer, hvad så med simpelthen at kalde den for "cpr"?

2) Opret en Person/Skytte klasse efter principperne angivet i 27/11-2007 08:28:29 og 27/11-2007 08:33:23.

3) Brug List<...> i stedet for ArrayList: List<Person> eller List<string>. Det performer bedre og din kode bliver nemmere at læse. Du behøver ikke at besvære dig mere med typecasts.

4) I din GetALLskytterNOTin() funktion læser du filen fra disken en gang for hvert cpr-nummer du ønsker at frasortere. Dette er ikke specielt effektivt og det slider tilmed unødigt på din disk. I stedet for at gøre det på den måde at du simpelthen loader filen ved programmets start (f.eks. ind i en List<Person> liste) - så kan du efterfølgende arbejde med denne liste uden at skulle ned at hente filen igen og igen.
Avatar billede nielle Nybegynder
03. december 2007 - 19:07 #20
Er du kommet vidre med denne her?
Avatar billede nielle Nybegynder
10. december 2007 - 18:30 #21
??
Avatar billede juks Novice
10. juni 2008 - 14:44 #22
smid et svar nielle
Avatar billede nielle Nybegynder
10. juni 2008 - 15:20 #23
Svar
Avatar billede md_craig Nybegynder
10. juni 2008 - 15:38 #24
Hmm... fik aldrig pinget tilbage her...

Men, Klub vil givet vis være en senere kandidat for dig som desideret klasse, en klub er jo meget mere end bare et navn, Det er en addresse, og eventuelt så har en klub sine tilhørende skytter lagret.

Klasse er også en potentiel kandidat, som klasse og eller enum, enum kan gå i og med at klasserne hvertfald ikke ændrede sig i al den tid jeg selv var skytte. (var lige fra jeg var Børne skytte (BK3-1 og hele vejen op til Voksen klasserne).

Yderligere så ville en Person klasse ved siden af det hele slet ikke være dumt, da der vil være nogle ting som er person relevandt, mens andre er skytte relevant. Så ville en skytte jo så se ud ala:

public class Skytte
{
  private Person person;
  private Klub klub;
  private Klasse klasse;
}

og så:

public class Klub
{
  private string navn;
  //Addresse osv kunne være interessant.
  //evt. vende tilhørsfoholdet om således at Klub har en:
  //List<Skytte> skytter;
  //List<Person> medlemmer; <- hvis man ønsker at modelere folk som ikke er skytter
  // ind men som deltager i klub ting.
}

public class Person
{
  private string navn;
  private string cpr;
  //fornavn/efternavn adskildelse, addresse, tlf, indendørs/udendørs gennemsnit mm?.
  //15m, 50m, 100m, 200m, pistol?.
}

public enum Klasse
{
  BK1,
  BK2,
  BK3,
  Junior1,
  osv... osv.
}

Men bare lige nogle ting til eftertanke... håber det giver lidt ideer om hvordan ting kan modeleres med sigende objekter.
Avatar billede juks Novice
11. juni 2008 - 08:28 #25
det gør det helt sikkert tak for hjælpen til alle
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