vangelisbb Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Καλησπέρα Μέσω ενός 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 ; Ευχαριστώ
nucleus Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Array 42 θέσεων κάθε θέση περιέχει έναν "τύπο" Object το οποίο έχει τα παρακάτω γνωρίσματα [id][icao][name][country][lat][lng][hub][fuelprice][chartlink] Λογικά για να τα βάλεις σε ένα datagridView πρέπει να κάνεις ένα DataColumn για κάθε γνώρισμα με το ίδιο όνομα και απλώς να φτιάξεις ένα row για κάθε ένα από τα 42 objects.
vangelisbb Δημοσ. 7 Ιουνίου 2013 Μέλος Δημοσ. 7 Ιουνίου 2013 Ευχαριστώ Για την απάντηση. Έχω 2 ερωτήσεις 1 από που προκύπτη το 42 και 2 μήπως έχεις ένα παράδειγμα η κανένα code snipet ;
bird Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 To 42 προέκυψε γιατι στο αρχικό σου Post είχες 42 Objects. Τώρα έτσι όπως το έχεις αλλάξει, είναι 6.([0],[1]...[5])
nucleus Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Όταν απάντησα το κομμάτι κώδικα έδειχνε 42 στο τελευταίο item στο array. Όταν λες τα φέρνεις στην VB σε τι μορφή?Ποιά method της HttpWebResponse χρησιμοποιείς?Την HttpWebResponse.GetResponseStream?
vangelisbb Δημοσ. 8 Ιουνίου 2013 Μέλος Δημοσ. 8 Ιουνίου 2013 Καλημέρα Έσβησα ορισμένα για να μην πιάνει πολύ χώρο στο 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
nucleus Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 To αποτέλεσμα της παραπάνω συνάρτησης GetPageAsString σου επιστρέφει html κώδικα ή αυτό που αναφέρεις στο πρώτο post σε ένα τεράστιο string?
vangelisbb Δημοσ. 8 Ιουνίου 2013 Μέλος Δημοσ. 8 Ιουνίου 2013 Αν κατάλαβα καλά το φέρνει σε ένα τεράστιο string αν του πω richtextbox.text=GetPageAsString("APVacars","?data=getairports") το φέρνει όπως το έκανα επικόλληση ποιο πάνω. Εάν θες να το δεις το link είναι Site: http://www.gsairways.gr/phpvms/action.php/APVacars?data=getairports">http://www.gsairways.gr/phpvms/action.php/APVacars?data=getairports
nucleus Δημοσ. 13 Ιουνίου 2013 Δημοσ. 13 Ιουνίου 2013 Έτοιμο το σεντονάκι. 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 περιέχει παράδειγμα αναδρομής. 1
vangelisbb Δημοσ. 25 Ιουνίου 2013 Μέλος Δημοσ. 25 Ιουνίου 2013 Καλημέρα Ευχαριστώ για τον κόπο σου θα το διαβάσω και θα το δοκιμάσω. (κάπου έχασα το post και το είδα τυχέα σήμερα ) 1
vangelisbb Δημοσ. 25 Ιουνίου 2013 Μέλος Δημοσ. 25 Ιουνίου 2013 Μετά από ένα πακέτο τσιγάρα και 5 φραπέδες (κάνει και ζέστη εδώ) το μόνο που κατάφερα είναι να φέρω μία εγγραφή σε ένα label Label1.Text = airportsArray(0).Icao οπότε καλέ μου φίλε φίλε μου καλέ nucleus μία βοήθεια θα ήταν ότι πρέπει μπας και το καταφέρω και χαρώ λίγο. Υπ όψην ότι έχω κάνει είναι με copy paste και code snipets Χομπι που βρήκα να διαλέξω
nucleus Δημοσ. 25 Ιουνίου 2013 Δημοσ. 25 Ιουνίου 2013 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!
vangelisbb Δημοσ. 25 Ιουνίου 2013 Μέλος Δημοσ. 25 Ιουνίου 2013 Βαθιά ανάσα όταν λες Για δοκίμασε αυτό και δες τι έξοδο σου βγάζει. πως το εννοείς ?
nucleus Δημοσ. 25 Ιουνίου 2013 Δημοσ. 25 Ιουνίου 2013 Μετά από ένα πακέτο τσιγάρα και 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
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα