Avatar billede zinuss Nybegynder
28. juni 2011 - 23:05 Der er 5 kommentarer og
1 løsning

Split af array

Hej :)

Jeg er totalt noob til programmering, så må kaste håndklædet i ringen med dette.. Syntes ikke rigtig jeg kan finde noget på nettet omkring.
Situationen er den at jeg skal læse en tekstfil og derefter splitte arrayet op til henholdsvis double og string (skal bruges til charts)

Jeg har fået splittet arrayet op og konveret, men den tæller alt for meget. Hvis arrayet har en længde på foreksempel 6, skal halvdelen være 1,3,5 være doubles og 2,4,6 string:

Formattet på filen jeg henter fra ser sådan ud:
21.9;26-06-2011 23:10
;21.4;26-06-2011 23:22
;21.4;26-06-2011 23:35
;24.4;27-07-2011 23:35


Jeg bruger ; som sperator. 21.9,21.4,21.4 og 24.4 skal være doubles og dato/klokken skal være string..

Her er min kode:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);

NumberFormatInfo provider = new NumberFormatInfo();

StreamReader objInput = new StreamReader(@"c:\windows\system32\TUL_log.txt", System.Text.Encoding.Default);

string contents = objInput.ReadToEnd();
string[] split = contents.Split(new char[] { ';' });

double[] ysplit = new double[split.Length];
string[] xsplit = new string[split.Length];

int x = 0;
           
for (int d = 0; d < split.Length; d++)
{

  ysplit[x] = Convert.ToDouble(split[d], provider);
  d++;
  xsplit[x] = split[d];
  x++;
}
chart1.Series["Series1"].Points.DataBindXY(xsplit, ysplit);

Jeg søger efter en lettere måde læse, splitte og konvetere på, eller finde ud hvorfor min xsplit og ysplit får en lægnde på 8, når de reelt jo kan skulle være på 4 hver?

Jeg har stirret mig blind på det :)

/K
Avatar billede heinzdmx Nybegynder
28. juni 2011 - 23:17 #1
Du opretter den med den fulde længde (split.Length), men allokere kun her anden og derfor burde du i stedet oprette med (split.Length/2)

Eller også kunne du bruge en liste

List<double> list = new List<double>();

list.Add(Convert.ToDouble(split[d], provider));
Avatar billede zinuss Nybegynder
28. juni 2011 - 23:37 #2
Fucking eh!! Haha, hvor fedt, det virker sku..

Danx buddy! Smid et svar :)

For dem der kunne være interesseret senere hen ændrede jeg:

for (int d = 0; d < split.Length; d++)
{

  ysplit[x] = Convert.ToDouble(split[d], provider);
  d++;
  xsplit[x] = split[d];
  x++;
}

til

List<double> ysplit = new List<double>();
List<string> xsplit = new List<string>();

for (int d = 0; d < split.Length; d++)
{
  ysplit.Add(Convert.ToDouble(split[d], provider));
  d++;
  xsplit.Add(split[d]);
}

Kald mig bare spaghetti, men det virker og jeg er lykkelig ;)
Avatar billede arne_v Ekspert
28. juni 2011 - 23:38 #3
public class Data
{
    public double Val { get; set; }
    public DateTime Time { get; set; }
}

og en List<Data> virker oplagt til at gemme data i.

Og saa ville jeg bruge ReadLine fremfor ReadToEnd og saa processe hvcer linie separat.
Avatar billede heinzdmx Nybegynder
28. juni 2011 - 23:43 #4
Svar her
Avatar billede solle Nybegynder
27. august 2011 - 15:50 #5
Nu er der godt nok svaret på det, men..
koden:
string contents = objInput.ReadToEnd();
string[] split = contents.Split(new char[] { ';' });

double[] ysplit = new double[split.Length];
string[] xsplit = new string[split.Length];

spørgsmål:
Jeg søger efter en lettere måde læse, splitte og konvetere på, eller finde ud hvorfor min xsplit og ysplit får en lægnde på 8, når de reelt jo kan skulle være på 4 hver?


svar:
new ???[split.Length]; bliver altid 8 hvis der er 8 elementer .. måske du ku have brugt
new double[(split.Length/2)];
Avatar billede z5ivan Nybegynder
30. august 2011 - 18:13 #6
Jeg så ikke at der var svaret, men her er en løsning.
var data = (from l in File.ReadLines((@"c:...")
                let v = l.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
                select new { x = double.Parse(v[0]), y = v[1] }).ToArray();

chart1.Series["Series1"].Points.DataBindXY(
  data.Select(v => v.x).ToArray(),
  data.Select(v => v.y).ToArray());
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