2016-06-13 8 views
2

Ich erstelle eine andere Lösung von einer Website tutorial mit Visual Studio 2015 C# (mit einigen Änderungen am Code).Wie weisen Sie Visual Studio C# Werte aus der Textdatei zu?

Die XAML-Datei:

<Window x:Class="WPFTestApplication.InsertPushpin" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF" 
    Width="1024" Height="768"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
     <m:Map CredentialsProvider="INSERT_YOUR_BING_MAPS_KEY"> 
     </m:Map> 
    </Grid> 
    </Window> 

Die xaml.cs Datei ist wie folgt:

using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Globalization; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using Microsoft.Maps.MapControl.WPF; 
using Microsoft.Maps.MapControl.WPF.Design; 

namespace WPFTestApplication 
{ 
public partial class AddPushpinToMap : Window 
{ 
    LocationConverter locConverter = new LocationConverter(); 

public AddPushpinToMap() 
{ 
    InitializeComponent(); 
    Pushpin pin = new Pushpin(); 
    pin.Location = new Location(37.1481402218342, -119.644248783588); 

    // Adds the pushpin to the map. 
    myMap.Children.Add(pin); 

    } 
} 
} 

Ich habe eine Textdatei, die Float-Werte in diesem Format enthält:

1.234 
145.765 
1.267 
145.957 

Der erste Wert ist der Breitengrad und der zweite Wert ist der Längengrad. Diese wiederholt sich für die 3. und 4., 5. und 6. usw.

Ich möchte den ersten zuweisen und zweiten Werte aus der Text-Datei auf der Codezeile

 pin.Location = new Location(1st_value,2nd_value); 

und dann wird es eine Reißzwecke in den die Karte.

Aber ich bin ein Neuling und ich bin mir nicht sicher, wie man aus der Textdatei liest und den Wert zu dieser Linie des Codes addiert.

Wie kann ich die Werte aus der Textdatei der Codezeile zuordnen?

Dank

+0

Eine weitere seltsame Weltfrage. :) –

+0

Danke für deine Antworten :) Mein Code funktioniert jetzt. – Gajesh

Antwort

4

Sie File.ReadLines Methode verwenden, um den Inhalt der Datei zu lesen.

Als Anfänger können Sie mit der Iteration über die Liste beginnen, indem Sie foreach verwenden.

var lines = File.ReadLines(filepath).ToList(); 
var locations = new List<Location>(); 
if(lines.Count() %2 !=0) throw new ArgumentException("invalid no.of vertices"); 

for(int i=0;i<lines.Count();i+=2) 
{ 
    double lat = double.Parse(lines[i]); 
    double lon = double.Parse(lines[i+1]); 

    locations.Add(new Location(lat, lon)); 
} 

Wenn Sie mit Linq vertraut sind können Sie dies wie unten mit Linq zu tun.

var locations = File.ReadLines(filepath) 
    .Select((line,i)=> new {line, index=i/2 }) 
    .GroupBy(x=>x.index) 
    .Select(x=> new Location(double.Parse(x.First().line),double.Parse(x.Last().line))) 
    .ToList(); 
1

Dies kann Ihnen helfen: Verwenden File.ReadAllLines alle Linien (als Array) von der Datei zu erhalten. Gemäß Ihren Eingabespezifikationen befindet sich die latitude in der ersten Zeile und die longitude in der zweiten Zeile, so dass Sie über ihren Index darauf zugreifen können. Verwenden Sie die Methode double.TryParse(), um diese Werte in ein doppeltes Äquivalent umzuwandeln. Betrachten wir nun den folgenden Code dafür:

string [email protected]"local path to the file"; 
var Lines= System.IO.File.ReadAllLines(textFilePath); 
double latitude,longitude; 
double.TryParse(Lines[0],out latitude); 
double.TryParse(Lines[1],out longitude); 
pin.Location = new Location(latitude,longitude); 
2

Dies sollte Ihnen etwas mit zu beginnen,

 using (StreamReader reader = new StreamReader("*** your filepath ***")) 
     { 
      while (!reader.EndOfStream) 
      { 
       double lat = double.Parse(reader.ReadLine()); 
       double lon = double.Parse(reader.ReadLine()); 

       pin.Location = new Location(lat, lon); 
      } 
     } 
1

Sobald Sie den Inhalt der Datei lesen, können Sie Sammlung aller Breite und Länge Informationen in List halten und jedes Listenelement würde Paar Breite und Länge Werte sein. Tuple sollte hier den Zweck lösen.

private void BuildGeoInfo() 
    { 
     string textFilePath = @"path to your text file"; 

     //Read all the contents of file as list of lines 
     var fileLines = System.IO.File.ReadAllLines(textFilePath).ToList(); 

     //This list will hold the Latitude and Longitude information in pairs 
     List<Tuple<double, double>> latLongInfoList = new List<Tuple<double, double>>(); 

     int index = 0; 
     while (index < fileLines.Count) 
     { 
      var latLongInfo = new Tuple<double, double>(
            Convert.ToDouble(fileLines[index]), 
            //++ to index to get value of next line 
            Convert.ToDouble(fileLines[index++])); 

      latLongInfoList.Add(latLongInfo); 

      index++; //++ to index to move to next line 
     } 
    } 

Anschließend können Sie die Daten in der Sammlung wie dies zum Beispiel verwenden -

var latitude = latLongInfoList.First().Item1; 
var longitude = latLongInfoList.First().Item2; 
pin.Location = new Location(latitude,longitude); 

Sie für die Eckfällen überprüfen und sie entsprechend behandeln, wie das, was, wenn die Leitungen nicht in Multiplikator von zwei sind, Typ jeder Textzeile usw.

Verwandte Themen