Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα 

Μέσω ενός Php παίρνω αυτά τα δεδομένα 


Array
(
    [0] => stdClass Object
        (
            [id] => 31
            [icao] => EDDF
            [name] => Frankfurt Airport
            [country] => Germany
            [lat] => 50.0406
            [lng] => 8.55603
            [hub] => 1
            [fuelprice] => 0
            [chartlink] => 
        )

    [1] => stdClass Object
        (
            [id] => 30
            [icao] => EGCC
            [name] => Manchester Airport
            [country] => United Kingdom
            [lat] => 53.3537
            [lng] => -2.27495
            [hub] => 0
            [fuelprice] => 0
            [chartlink] => 
        )

    [2] => stdClass Object
        (
            [id] => 24
            [icao] => LCLK
            [name] => Larnaca International Airport
            [country] => Cyprus
            [lat] => 34.8751
            [lng] => 33.6249
            [hub] => 0
            [fuelprice] => 0
            [chartlink] => 
        )

    [3] => stdClass Object
        (
            [id] => 25
            [icao] => LCPH
            [name] => Paphos International Airport
            [country] => Cyprus
            [lat] => 34.718
            [lng] => 32.4857
            [hub] => 0
            [fuelprice] => 0
            [chartlink] => 
        )

    [4] => stdClass Object
        (
            [id] => 33
            [icao] => LGAD
            [name] => Andravida Airport
            [country] => Greece
            [lat] => 37.9207
            [lng] => 21.2926
            [hub] => 0
            [fuelprice] => 0
            [chartlink] => 
        )

    [5] => stdClass Object
        (
            [id] => 19
            [icao] => LGAL
            [name] => Alexandroupoli Airport
            [country] => Greece
            [lat] => 40.8559
            [lng] => 25.9563
            [hub] => 0
            [fuelprice] => 0
            [chartlink] => 
        )

)

και με HttpWebRequest και HttpWebResponse τα φέρνω στην Visual Basic 2010 

 

Θα μπορούσε να μου πει κάποιος αν είναι arry η κάτι άλλο και πώς θα μπορούσα να το βάλω σε ένα datagridview ; 

 

Ευχαριστώ

Δημοσ.

Array 42 θέσεων κάθε θέση περιέχει έναν "τύπο" Object το οποίο έχει τα παρακάτω γνωρίσματα

 

[id]
[icao]
[name]
[country]
[lat]
[lng]
[hub]
[fuelprice]
[chartlink]

 

Λογικά για να τα βάλεις σε ένα datagridView πρέπει να κάνεις ένα DataColumn για κάθε γνώρισμα με το ίδιο όνομα και απλώς να φτιάξεις ένα row για κάθε ένα από τα 42 objects.

Δημοσ.

Ευχαριστώ Για την απάντηση.

 

Έχω 2 ερωτήσεις 

1 από που προκύπτη το 42 

και 2 μήπως έχεις ένα παράδειγμα η κανένα code snipet ; 

Δημοσ.

To 42 προέκυψε γιατι στο αρχικό σου Post είχες 42 Objects. Τώρα έτσι όπως το έχεις αλλάξει, είναι 6.([0],[1]...[5])

Δημοσ.

Όταν απάντησα το κομμάτι κώδικα έδειχνε 42 στο τελευταίο item στο array.

 

Όταν λες τα φέρνεις στην VB σε τι μορφή?Ποιά method της HttpWebResponse χρησιμοποιείς?Την HttpWebResponse.GetResponseStream?

Δημοσ.

Καλημέρα 

 

Έσβησα ορισμένα για να μην πιάνει πολύ χώρο στο post αλλά μάλλον τυχαία ήταν καλό γιαυτό το κατάλαβα ποιο εύκολα :)

 

Η μέθοδος που χρησιμοποιώ όντως είναι η  HttpWebResponse.GetResponseStream και έχω κάνει μία function για να είναι ποιο εύκολο

Public Function GetPageAsString(ByVal action, ByVal calls) As String

        Dim request As HttpWebRequest
        Dim response As HttpWebResponse = Nothing
        Dim reader As StreamReader
        Dim result As String = "0"

        Try
            ' Create the web request  
            request = DirectCast(WebRequest.Create(My.Settings.VaWebSite & "/action.php/APVacars?data=" & action & calls), HttpWebRequest)

            ' Get response  
            response = DirectCast(request.GetResponse(), HttpWebResponse)

            ' Get the response stream into a reader  
            reader = New StreamReader(response.GetResponseStream())

            ' Read the whole contents and return as a string  
            result = reader.ReadToEnd()
        Catch ex As Exception
            Dim error1 As String = ErrorToString()
            MsgBox(error1)
        Finally
            If Not response Is Nothing Then response.Close()

        End Try

        Return result

    End Function
Δημοσ.

To αποτέλεσμα της παραπάνω συνάρτησης GetPageAsString σου επιστρέφει html κώδικα ή αυτό που αναφέρεις στο πρώτο post σε ένα τεράστιο string?

Δημοσ.

Αν κατάλαβα καλά το φέρνει σε ένα τεράστιο string αν του πω richtextbox.text=GetPageAsString("APVacars","?data=getairports")

το φέρνει όπως το έκανα επικόλληση ποιο πάνω.

 

 

Εάν θες να το δεις το link είναι


Link.png Site: http://www.gsairways.gr/phpvms/action.php/APVacars?data=getairports">http://www.gsairways.gr/phpvms/action.php/APVacars?data=getairports

Δημοσ.

Έτοιμο το σεντονάκι.
 
Disclaimer.
To παρακάτω κείμενο αποτελεί ιδιοκτησία και clopyright της Πέντε (όχι Τρία) Κιλά Κώδικας Α.Ε.Β.Ε και η προαναφερθείσα εταιρεία δεν ευθύνεται για τις παρακάτω συνέπειες
-οποιαδήποτε βλάβη υλικού μπορεί να προέρθει από την χρήση του.
-κόκκινα μάτια από το ξενύχτι και ή γεμάτα τασάκια με αποτσίγαρα και ή κατανάλωση ηρεμιστικών προσπαθώντας να βρεις γιατί σκάει.
 

 

        Dim inputToParse As String = "String Που περιέχει τα δεδομένα από το WebResponse"
        Dim withArrayRemoved As String = inputToParse.Remove(0, inputToParse.IndexOf("("))
        Dim withEqual As String = withArrayRemoved.Replace("=>", "=")
        Dim normalized As String = withEqual.TrimStart("(").Trim().TrimEnd(")")

        Dim airportsArray As New Dictionary(Of Integer, AirportClass)

        Dim splitWithCloseParenthesis As String() = normalized.Split(")")
        For Each token In splitWithCloseParenthesis
            If Not String.IsNullOrWhiteSpace(token) Then
                Dim airport As New AirportClass(token)
                If Not airportsArray.ContainsKey(airport.AirportCount) Then
                    airportsArray.Add(airport.AirportCount, airport)
                End If
            End If
        Next
        For Each airportRow As KeyValuePair(Of Integer, AirportClass) In airportsArray
            Dim printOutTemplate As String = "KeyValue Στο Array [{0}]:Id={1},icao={2},name={3},country={4},lat={5},lng={6},hub={7},fuelPrice={8},chartlink={9}"
            Dim airportObject As AirportClass = airportRow.Value
            String.Format(printOutTemplate, airportRow.Key, airportObject.AirportID, airportObject.Icao, airportObject.Name, airportObject.Country, airportObject.Lat, airportObject.Lng, airportObject.Hub, airportObject.FuelPrice, airportObject.ChartLink)
        Next

 


 
Η μεταβλητή inputToParse περιέχει το input string μας όπως εμφανίζεται στο link που έδωσες στο προηγούμενο post.
Η μεταβλητή withArrayRemoved περιέχει το παραπάνω string inputToParse χωρίς την αρχική λέξη Array.
Η μεταβλητή withEqual περιέχει το παραπάνω string withArrayRemoved με τα "=>" που είχε αντικατεστημένα με το "=".
Η μεταβλητή normalized περιέχει το παραπάνω string withEqual χωρίς το πρώτο "(" και το τελευταίο ")"
 
Μετά ορίζω ένα Dictionary που περιέχει ζεύγη (key,value) με το key να είναι ακέραιος και value ένα object του τύπου AirportClass.(Δες το δεύτερο spoiler).Μπορείς να χρησιμοποιήσεις Array ή ότι άλλο θέλεις εδώ.

Dim airportsArray As New Dictionary(Of Integer, AirportClass)

Μετά έχουμε το κύριο μέρος.

 Dim splitWithCloseParenthesis As String() = normalized.Split(")")
        For Each token In splitWithCloseParenthesis
            If Not String.IsNullOrWhiteSpace(token) Then
                Dim airport As New AirportClass(token)
                If Not airportsArray.ContainsKey(airport.AirportCount) Then
                    airportsArray.Add(airport.AirportCount, airport)
                End If
            End If
        Next

Παίρνουμε την μεταβλητή normalized και εφαρμόζουμε αρχικά ένα split με τον χαρακτήρα ")".Η split επιστρέφει ένα πίνακα με όλα τα "στοιχεία" στα οποία "χώρισε" το string εισόδου.
Για κάθε ένα από αυτά τα στοιχεία αν δεν είναι κενό ή null ή whitespace φτιάχνουμε ένα object της κλάσσης AirportClass (δες δευτερο spoiler) και το προσθέτουμε στο Dictionary που φτιάξαμε.
 
Ας περιγράψουμε τώρα την βοηθητική κλάσση AirportClass.Ακολουθεί ολόκληρος ο κώδικας της αρχικά.
 

 

Public Class AirportClass

    Private _airportCount As String
    Public Property AirportCount() As String
        Get
            Return _airportCount
        End Get
        Set(ByVal value As String)
            _airportCount = value
        End Set
    End Property

    Private _airportId As String
    Public Property AirportID() As String
        Get
            Return _airportId
        End Get
        Set(ByVal value As String)
            _airportId = value
        End Set
    End Property

    Private _icao As String
    Public Property Icao() As String
        Get
            Return _icao
        End Get
        Set(ByVal value As String)
            _icao = value
        End Set
    End Property

    Private _name As String
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Private _country As String
    Public Property Country() As String
        Get
            Return _country
        End Get
        Set(ByVal value As String)
            _country = value
        End Set
    End Property

    Private _lat As String
    Public Property Lat() As String
        Get
            Return _lat
        End Get
        Set(ByVal value As String)
            _lat = value
        End Set
    End Property

    Private _lng As String
    Public Property Lng() As String
        Get
            Return _lng
        End Get
        Set(ByVal value As String)
            _lng = value
        End Set
    End Property

    Private _hub As String
    Public Property Hub() As String
        Get
            Return _hub
        End Get
        Set(ByVal value As String)
            _hub = value
        End Set
    End Property

    Private _fuelPrice As String
    Public Property FuelPrice() As String
        Get
            Return _fuelPrice
        End Get
        Set(ByVal value As String)
            _fuelPrice = value
        End Set
    End Property

    Private _chartLink As String
    Public Property ChartLink() As String
        Get
            Return _chartLink
        End Get
        Set(ByVal value As String)
            _chartLink = value
        End Set
    End Property

    Public Sub New(ByVal initializeText As String)
        Dim splitWithOpenParenthesis As String() = initializeText.Split("(")

        For Each closeToken As String In splitWithOpenParenthesis
            If Not String.IsNullOrWhiteSpace(closeToken) Then
                If closeToken.Contains("stdClass Object") Then
                    Dim splitWithEqualSign As String() = closeToken.Split("=")
                    Me.AirportCount = splitWithEqualSign(0).Trim.TrimStart("[").TrimEnd("]")
                Else
                    Dim dataValuesTokenSubstituteOpenBracketWithOpenBracketAndComma As String = closeToken.Trim.Replace("[", "#[").Trim.TrimStart("#")
                    Dim dataValues As String() = dataValuesTokenSubstituteOpenBracketWithOpenBracketAndComma.Split("#")
                    For Each dataValueRow As String In dataValues

                        Dim splitWithEqualResult As String() = dataValueRow.Split("=")
                        Dim propertyName = splitWithEqualResult(0)
                        Dim propertyValue = splitWithEqualResult(1)
                        Select Case propertyName.Trim
                            Case "[id]"
                                Me.AirportID = propertyValue.Trim
                            Case "[icao]"
                                Me.Icao = propertyValue.Trim
                            Case "[name]"
                                Me.Name = propertyValue.Trim
                            Case "[country]"
                                Me.Country = propertyValue.Trim
                            Case "[lat]"
                                Me.Lat = propertyValue.Trim
                            Case "[lng]"
                                Me.Lng = propertyValue.Trim
                            Case "[hub]"
                                Me.Hub = propertyValue.Trim
                            Case "[fuelprice]"
                                Me.FuelPrice = propertyValue.Trim
                            Case "[chartlink]"
                                Me.ChartLink = propertyValue.Trim
                            Case Else
                                Throw New Exception("Unrecognizable Attribute")
                        End Select
                    Next
                End If
            End If
        Next
    End Sub
End Class

 


 
Ο ορισμός της απλός ένα Property με τις αντίστοιχες get και set και ένας constructor που δέχεται σαν όρισμα ένα απλό string της παρακάτω μορφής.
 

[0] = stdClass Object ( [id] = 31 [icao] = EDDF [name] = Frankfurt Airport [country] = Germany [lat] = 50.0406 [lng] = 8.55603 [hub] = 1 [fuelprice] = 0 [chartlink] =

 
Τα properties είναι ένα για το κάθε δεδομένο που θες + ένα ακόμα το AirportCount που στην ουσία αριθμεί τα αντικείμενα στο Array σου αρχικά.Πχ στην παραπάνω είσοδο το AirportCount είναι 0.
 
Ας δούμε τον constructor τώρα.
 

    Public Sub New(ByVal initializeText As String)
        Dim splitWithOpenParenthesis As String() = initializeText.Split("(")

        For Each closeToken As String In splitWithOpenParenthesis
            If Not String.IsNullOrWhiteSpace(closeToken) Then
                If closeToken.Contains("stdClass Object") Then
                    Dim splitWithEqualSign As String() = closeToken.Split("=")
                    Me.AirportCount = splitWithEqualSign(0).Trim.TrimStart("[").TrimEnd("]")
                Else
                    Dim dataValuesTokenSubstituteOpenBracketWithOpenBracketAndComma As String = closeToken.Trim.Replace("[", "#[").Trim.TrimStart("#")
                    Dim dataValues As String() = dataValuesTokenSubstituteOpenBracketWithOpenBracketAndComma.Split("#")
                    For Each dataValueRow As String In dataValues

                        Dim splitWithEqualResult As String() = dataValueRow.Split("=")
                        Dim propertyName = splitWithEqualResult(0)
                        Dim propertyValue = splitWithEqualResult(1)
                        Select Case propertyName.Trim
                            Case "[id]"
                                Me.AirportID = propertyValue.Trim
                            Case "[icao]"
                                Me.Icao = propertyValue.Trim
                            Case "[name]"
                                Me.Name = propertyValue.Trim
                            Case "[country]"
                                Me.Country = propertyValue.Trim
                            Case "[lat]"
                                Me.Lat = propertyValue.Trim
                            Case "[lng]"
                                Me.Lng = propertyValue.Trim
                            Case "[hub]"
                                Me.Hub = propertyValue.Trim
                            Case "[fuelprice]"
                                Me.FuelPrice = propertyValue.Trim
                            Case "[chartlink]"
                                Me.ChartLink = propertyValue.Trim
                            Case Else
                                Throw New Exception("Unrecognizable Attribute")
                        End Select
                    Next
                End If
            End If
        Next
    End Sub
End Class

Αρχικά κάνει ένα split με το "(".Πχ για την είσοδο
 

[0] = stdClass Object ( [id] = 31 [icao] = EDDF [name] = Frankfurt Airport [country] = Germany [lat] = 50.0406 [lng] = 8.55603 [hub] = 1 [fuelprice] = 0 [chartlink] =

Θα έχεις 2 τιμές στον πίνακα splitWithOpenParenthesis τις
 

[0] = stdClass Object

και

[id] = 31 [icao] = EDDF [name] = Frankfurt Airport [country] = Germany [lat] = 50.0406 [lng] = 8.55603 [hub] = 1 [fuelprice] = 0 [chartlink] =

Μετά ελέγχει σε ποια θέση είμαστε.Αν περιέχει το "stdClass Object" απλώς πρέπει να πάρουμε τον αριθμό ανάμεσα στις [] και να τον βάλουμε στο property AirportCount του object.Aν είμαστε στην άλλη περίπτωση πρέπει να αναθέσουμε τις τιμές στα υπόλοιπα properties.Αντικαθιστούμε το "[" με το "#["
και αφαιρούμε το πρώτο # οπότε έχουμε.

[id] = 31 #[icao] = EDDF #[name] = Frankfurt Airport #[country] = Germany #[lat] = 50.0406 #[lng] = 8.55603 #[hub] = 1 #[fuelprice] = 0 #[chartlink] =

Split το παραπάνω με το # έχουμε πάρει ένα πίνακα όλες τις τιμές που θέλουμε στην μορφή
[όνομα property] = τιμή property.Το select case είναι απλό να δεις τι κάνει και δεν θα το εξηγήσω.
 
To να τα βάλεις σε ένα DataGrid ή οπουδήποτε αλλού είναι σχετικά εύκολο πια αν χρησιμοποιήσεις το Dictionary.To αρχικό spoiler περιέχει παράδειγμα αναδρομής.

  • Like 1
  • 2 εβδομάδες αργότερα...
Δημοσ.

Καλημέρα

 

 

Ευχαριστώ για τον κόπο σου θα το διαβάσω και θα το δοκιμάσω.

 

(κάπου έχασα το post και το είδα τυχέα σήμερα )

  • Like 1
Δημοσ.

Μετά από ένα πακέτο τσιγάρα και 5 φραπέδες (κάνει και ζέστη εδώ) το μόνο που κατάφερα είναι να φέρω μία εγγραφή σε ένα label 

Label1.Text = airportsArray(0).Icao

οπότε καλέ μου φίλε φίλε μου καλέ nucleus μία βοήθεια θα ήταν ότι πρέπει μπας και το καταφέρω και χαρώ λίγο.

 

Υπ όψην ότι έχω κάνει είναι με copy paste και code snipets 

Χομπι που βρήκα να διαλέξω  :-)

Δημοσ.
For Each airportRow As KeyValuePair(Of Integer, AirportClass) In airportsArray
  Dim printOutTemplate As String = "KeyValue Στο Array [{0}]:Id={1},icao={2},name={3},country={4},lat={5},lng={6},hub={7},fuelPrice={8},chartlink={9}"
  Dim airportObject As AirportClass = airportRow.Value
  String.Format(printOutTemplate, airportRow.Key, airportObject.AirportID, airportObject.Icao, airportObject.Name, airportObject.Country, airportObject.Lat, airportObject.Lng, airportObject.Hub, airportObject.FuelPrice, airportObject.ChartLink)
Next

Για δοκίμασε αυτό και δες τι έξοδο σου βγάζει.

 

Για το datagrid σκέψου ότι πίσω από αυτό υπάρχει ένα datatable.

 

http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

 

Κοίτα τα properties Columns και Rows του datatable.

 

Το datatable αποτελείται απο datacolumns

 

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.aspx

 

Οπότε αυτό που θέλεις είναι να ορίσεις ένα datatable.To datatable θα αποτελείται από datacolumns μια για κάθε στοιχείο του αεροδρομίου.

 

Id,icao,name,country,lat,lng,hub,fuelPrice,chartlink

 

Αφού ορίσεις τa datacolumns και τα προσθέσεις στο datatable θα πρέπει για κάθε ένα από τα στοιχεία στο airportsArray

να προσθέσεις μια νέα γραμμή (row) στο datatable δες εδώ http://msdn.microsoft.com/en-us/library/system.data.datatable.newrow.aspx και μετά να βάλεις σε κάθε column της νέας γραμμής τα αντίστοιχα δεδομένα.

 

Bind το datagrid με το datable και done!

Δημοσ.

Μετά από ένα πακέτο τσιγάρα και 5 φραπέδες (κάνει και ζέστη εδώ) το μόνο που κατάφερα είναι να φέρω μία εγγραφή σε ένα label 

Label1.Text = airportsArray(0).Icao

 

Αντικαθιστάς αυτό με αυτό

 

Dim output as string = ""
For Each airportRow As KeyValuePair(Of Integer, AirportClass) In airportsArray
 Dim printOutTemplate As String = "KeyValue Στο Array [{0}]:Id={1},icao={2},name={3},country={4},lat={5},lng={6},hub={7},fuelPrice={8},chartlink={9}"
 Dim airportObject As AirportClass = airportRow.Value
 output += String.Format(printOutTemplate, airportRow.Key, airportObject.AirportID, airportObject.Icao, airportObject.Name, airportObject.Country, airportObject.Lat, airportObject.Lng, airportObject.Hub, airportObject.FuelPrice, airportObject.ChartLink)
Next
Label1.Text = output

Σου είπα να το δεις για να δεις τι έξοδο σου βγάζει το for each :S

 

Σεντονάκι incoming

 

 

 

Dim airportsDatatable As New DataTable("airports")
Dim idColumn As New DataColumn("id")
Dim icaoColumn As New DataColumn("icao")
Dim nameColumn As New DataColumn("name")
Dim countryColumn As New DataColumn("country")
Dim latColumn As New DataColumn("lat")
Dim lngColumn As New DataColumn("lng")
Dim hubColumn As New DataColumn("hub")
Dim fuelPriceColumn As New DataColumn("fuelprice")
Dim chartlinkColumn As New DataColumn("chartlink")

airportsDatatable.Columns.Add(idColumn)
airportsDatatable.Columns.Add(icaoColumn)
airportsDatatable.Columns.Add(nameColumn)
airportsDatatable.Columns.Add(countryColumn)
airportsDatatable.Columns.Add(latColumn)
airportsDatatable.Columns.Add(lngColumn)
airportsDatatable.Columns.Add(hubColumn)
airportsDatatable.Columns.Add(fuelPriceColumn)
airportsDatatable.Columns.Add(chartlinkColumn)

For Each airportRow As KeyValuePair(Of Integer, AirportClass) In airportsArray
Dim airportObject As AirportClass = airportRow.Value
Dim newAirportRow As DataRow = airportsDatatable.NewRow
newAirportRow("id") = airportObject.AirportID
newAirportRow("icao") = airportObject.Icao
newAirportRow("name") = airportObject.Name
newAirportRow("country") = airportObject.Country
newAirportRow("lat") = airportObject.Lat
newAirportRow("lng") = airportObject.Lng
newAirportRow("hub") = airportObject.Hub
newAirportRow("fuelprice") = airportObject.FuelPrice
newAirportRow("chartlink") = airportObject.ChartLink
airportsDatatable.Rows.Add(newAirportRow)
Next
DataGridView1.DataSource = airportsDatatable

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...