Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Behöver lite hjälp...

Postades av 2009-04-22 21:03:20 - Tobias Rosén, i forum c# (c-sharp), Tråden har 2 Kommentarer och lästs av 1026 personer

Efter en så uttömmande rubrik så kommer som vanligt ett nybörjar inlägg...

Jag håller på med ett litet program för att titta på GPS loggar.

Använder följande funktion för att läsa in data från en GPX fil

<code>
public GPXtrkType read(string file)
{
GPXwptType wpt = new GPXwptType();
GPXtrksegType trkseg = new GPXtrksegType();
GPXtrksegType trksegStore = new GPXtrksegType();
GPXtrkType trk = new GPXtrkType();
XmlNodeReader reader = null;
bool trksegRead = false;
string split = "\\";
string[] names;
string fullPath;

names = file.Split(split.ToCharArray());


if ( names.Length > 1 )
{
for( int i = 0; i < names.Length-1;i++ )
{
sPath += names[i];
sPath += "\\";
}
}
// olika varianter av filnamn
sFileName = names[names.Length-1];
trk.fileName = sFileName;
trk.path = sPath;
fullPath = sPath+sFileName;

//inställningar för filläsaren
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;

try
{
//Create an XmlNodeReader to read the XmlDocument.
XmlDocument doc = new XmlDocument();
doc.Load(fullPath);
reader = new XmlNodeReader(doc);

//läs igenom alla noder
while (reader.Read())
{
// hämtar spårets namn
if (reader.Name == "name")
{
trk.name = reader.ReadInnerXml();
}
// hämtar spårets beskrivning
if (reader.Name == "desc")
{
trk.desc = reader.ReadInnerXml();
}
//Varje fil kan ha flera traksegment
if (reader.Name == "trkseg")
{
trksegRead = true;
}
while (trksegRead)
{
//lat och lon ligger som attribut till trackpoint
if (reader.Name == "trkpt")
{
wpt.lat = Decimal.Parse(reader.GetAttribute("lat").Replace(".",","));
wpt.lon = Decimal.Parse(reader.GetAttribute("lon").Replace(".",","));
reader.Read();
}

//Varje trakpoint Kan ha ele och time som underelement
if (reader.Name == "ele")
{
wpt.ele = Decimal.Parse(reader.ReadInnerXml().Replace(".",","));
}
if ( reader.Name == "time")
{
wpt.setTime(reader.ReadInnerXml());
}
if (wpt.lat != 0 )
trkseg.addWptLast(wpt);
wpt = null;
wpt = new GPXwptType();
reader.Read();

// om vi hittar en till tracksegment så hoppar vi ur och börjar om
if (reader.Name == "trkseg"){
trksegRead = false;
}

}// end while trksegRead
if ( trkseg.countWpt() > 0 )
{
trksegStore.setWptList( trkseg.getwptList() );
trk.addTrksegLast(trksegStore);

}

trkseg = null;
trkseg = new GPXtrksegType();
trksegStore = null;
trksegStore = new GPXtrksegType();

}// end while reader.read

}
catch ( Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
if (reader!=null)
reader.Close();

}
return trk;
}
</code>
Mitt problem är att det funkar helt ok första gången.
Den andra gången byggs inte objektet track upp. Jag kan inte plock ut informationen ur det.

Om jag kommenterar bort if( reader != null ) i finally stycket så krachar programet andra gången jag läser in en fil.

Funktionen anropas via ett "knapp event"
if ( dlg.ShowDialog() == DialogResult.OK )
{
//läs in filen
track = re.read(dlg.FileName);
...
se sätter jag texten i några lables mha tex track.name

Tar tacksamt emot hjälp.
Har försökt söka info på egen hand men med ett så diffust problem är det svårt att söka

/Tobias


Svara

Sv: Behöver lite hjälp...

Postades av 2009-04-22 22:42:34 - Magnus Gladh

oj vad jobbig kod att läsa... :)

Jag fastna på ditt påstående om
"Mitt problem är att det funkar helt ok första gången.
Den andra gången byggs inte objektet track upp. Jag kan inte plock ut informationen ur det."

Det jag reagerar på är att du i din while-loop (reader.read()) sätter trk.Name med information från din xml-nod, men eftersom det alltid är samma trk-objekt så kommer du endast att skicka tillbaka information från den sista noden i ditt xml-objekt. Finns det noder innan som innehåller data så kommer dessa att skrivas över vid varje ny läsning.

Kanske det kan vara något...

- M


Svara

Sv: Behöver lite hjälp...

Postades av 2009-04-23 08:16:24 - Tobias Rosén

Jag hittade felet själv.

Variabeln sPath var deklarerad för hela klassen så den dubblerades.

Jag började med programmet i en konsoleversion och då använde jag spath för att komma ihåg arbetskatalogen.

Sen hade jag en console.writeline i catch blocket som gjorde att jag inte så felmedelandet när jag gick över till GUI.

när det gäller att skriva över namnet så defineras GPX schemat ( http://www.topografix.com/GPX/1/1/#type_trkType ) så att det får finnas 0 eller 1 namn, så den här gången ställer det inte till det.
Men du ska bara veta hur många gånger jag har skrivit över min egen info :)

Som sagt nybörjare...

TAck för hjälpen och hoppas att jag inte retat upp alltför många med mina bekymmer

Tobias


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 635
27 958
271 741
556
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies