Wie kann ich Lesen Sie die einzelnen Zeilen einer CSV-Datei in ein string-array, dann werden selektiv angezeigt, über combobox-Eingabe?
Brauche ich Eure Hilfe, Jungs! 😐
Habe ich mir eine CSV-Datei mit folgendem Inhalt:
1,The Compact,1.8GHz,1024MB,160GB,440
2,The Medium,2.4GHz,1024MB,180GB,500
3,The Workhorse,2.4GHz,2048MB,220GB,650
Es ist eine Liste von computer-Systemen, grundsätzlich gilt, dass der Benutzer kaufen können.
Muss ich diese Datei Lesen, Zeile für Zeile in ein array. Nennen wir dieses array csvline().
Die erste Zeile der text-Datei gespeichert csvline(0). Zeile zwei würde gespeichert werden in csvline(1). Und so weiter. (Ich habe angefangen mit null, weil das ist, wo die VB startet seine arrays). Ein drop-down-Liste würde dann dem Benutzer ermöglichen, wählen Sie 1, 2 oder 3 (oder wie viele Leitungen/Systeme in der Datei gespeichert werden). Bei Auswahl einer Anzahl - sagen wir 1 - csvline(0) angezeigt wäre, innerhalb einer textbox (textbox1, sagen wir). Wenn 2 ausgewählt wurde, csvline(1) angezeigt werden würde, und so weiter.
Es ist nicht die Formatierung, ich brauche Hilfe mit, obwohl; das ist der einfache Teil. Ich brauche nur jemanden, der helfen, mich lehren, wie Sie eine CSV-Datei line-by-line, setzen Sie jede Zeile in eine string-array - csvlines(count) - dann Inkrement-Zählung um eins, so dass die nächste Zeile in einen anderen Steckplatz.
So weit, ich habe in der Lage, fügen Sie die Nummer von jedem system in eine combobox:
Using csvfileparser As New Microsoft.VisualBasic.FileIO.TextFieldParser _
("F:\folder\programname\programname\bin\Debug\systems.csv")
Dim csvalue As String()
csvfileparser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
csvfileparser.Delimiters = New String() {","}
While Not csvfileparser.EndOfData
csvalue = csvfileparser.ReadFields()
combobox1.Items.Add(String.Format("{1}{0}", _
Environment.NewLine, _
csvalue(0)))
End While
End Using
Aber dies nur wählt die einzelnen Werte. Ich brauche, um herauszufinden, wie Sie eine dieser Nummern in der combobox auslösen können textbox1 angehängt werden, mit nur dieser Zeile (kann ich mit der Formatierung, die Verwendung der string.format Zeug). Wenn ich versuche, dies zu tun mit csvalue = csvtranslator.ReadLine
bekomme ich folgende Fehlermeldung:
"Fehler 1 der Wert vom Typ "String" kann nicht in "1-dimensionales array von String'."
Wenn dann steckte ich es als ein array, dh: csvalue() = csvtranslator.ReadLine
habe ich dann eine andere Fehlermeldung:
"Fehler 1 die Anzahl der Indizes ist geringer als die Anzahl der Dimensionen des indizierten Arrays."
Was ist das Talent, Jungs? Ich habe Stunden damit verbracht, zu versuchen, um dies herauszufinden.
Bitte gehen Sie einfach auf mich - und zu halten alle Antworten extrem einfach, für mein newbie-Hirn - ich bin sehr neu auf all dies-Programmierung malarkey und nur ab und zu aus! 🙂
Structure systemstructure
Dim number As Byte
Dim name As String
Dim procspeed As String
Dim ram As String
Dim harddrive As String
Dim price As Integer
End Structure
Private Sub csvmanagement()
Dim systemspecs As New systemstructure
Using csvparser As New FileIO.TextFieldParser _
("F:\folder\programname\programname\bin\Debug\systems.csv")
Dim csvalue As String()
csvparser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
csvparser.Delimiters = New String() {","}
csvalue = csvparser.ReadFields()
systemspecs.number = csvalue(0)
systemspecs.name = csvalue(1)
systemspecs.procspeed = csvalue(2)
systemspecs.ram = csvalue(3)
systemspecs.harddrive = csvalue(4)
systemspecs.optical = csvalue(5)
systemspecs.graphics = csvalue(6)
systemspecs.audio = csvalue(7)
systemspecs.monitor = csvalue(8)
systemspecs.software = csvalue(9)
systemspecs.price = csvalue(10)
While Not csvparser.EndOfData
csvalue = csvparser.ReadFields()
systemlist.Items.Add(systemspecs)
End While
End Using
End Sub
Edit:
Danke für Eure Hilfe Jungs, ich habe es geschafft das problem zu lösen jetzt.
Es war nur eine Frage aufrufen Schlaufen an der richtigen Stelle in der Zeit.
- Verwenden Sie nicht Microsoft.VisualBasic-namespace --- pfui.
- Vielen Dank für das informative Anregung, Cen. 😛 Sie werden froh zu hören, dass ich es entfernt.
- Sorry! Fll-vom radar über das lange Wochenende... Di Sie Sortieren Sie aus? PK 🙂
- Yeah, endlich geschafft. Vielen Dank für Ihre Hilfe. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, mit FileHelpers zu tun, das zu Lesen.
Die Bindung sollte kein Problem sein, dass nach.
Hier ist die Quickstart für Getrennte Datensätze:
Wenn Sie die Datei zu Lesen, legen Sie es in eine normale Klasse und nur binden Sie die Klasse oder die Liste der Artikel, die Sie haben, eigene Sachen mit der combobox. Im Grunde, um es aus der Datei und in eine Reale Klasse so schnell wie möglich, dann werden die Dinge einfacher sein.
Wenigstens einen Blick in die Bibliothek. Nachdem Sie es, verwenden wir eine Menge mehr einfache flat-files, da es so einfach ist, und wir haben noch nicht geschrieben, eine Datei zugreifen routine da (für die, die ein bisschen Zeug).
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx
Ich denke, Ihr Hauptproblem ist das Verständnis, wie arrays funktionieren (daher die Fehlermeldung).
Können Sie
split
undjoin
Funktionen zum konvertieren von strings in-und out-arraysdim s() as string = split("1,2,3",",")
gibt und array von strings mit den 3 Elementendim ss as string = join(s,",")
gibt Sie die Zeichenfolge zurückErstens, es ist eigentlich wirklich gut, dass Sie mit dem TextFieldParser für das Lesen von CSV - Dateien- die meisten tun es nicht, aber Sie müssen nicht sorgen zu machen über die zusätzlichen Kommas und zitierten text etc...
Den Readline Methode gibt nur den raw-string, daher die Fehlermeldung "Fehler 1 der Wert vom Typ "String" kann nicht in "1-dimensionales array von String'."
Was Sie finden leichter mit combo-Boxen etc., ist die Verwendung ein Objekt (z.B. 'systemspecs') anstelle von Zeichenfolgen. Ordnen Sie die CSV-Daten zu den Objekten und setzen die "ToString" - Methode des "systemspecs' - Klasse für die Anzeige in der combo-box, wie Sie wollen, mit der Formatierung etc. mit ein. So, wenn du mit dem SelectedIndexChanged-Ereignis (oder ähnlich) erhalten Sie die "SelectedItem" aus der combo-box (das kann also Nichts überprüfen) und wirken als "systemspecs', es zu benutzen. Der Vorteil ist, dass Sie nicht nur zur Anzeige des genauen Daten in der combo etc.
z.B.
Lassen Sie mich wissen, wenn das Sinn macht!
PK 🙂
systemspecs
Struktur, die Sie verwenden. Das "selectedindexchanged" ist ein combo-box-Veranstaltung die ich davon ausgegangen, das Sie verwenden, haben Sie einen Blick auf die combobox-Komponente überblick eine it-Mitglieder. Veranstaltungen etc in der MSDN. Siehe aktualisierte Antwort...