| |
VB.NET - Ein- und UmsteigerArray Index außerhalb des Arraybereichs | | | Autor: Jenpet | Datum: 01.07.12 20:22 |
| hallo ich habe eine frage zum index out of bound eines arrays.
ich lese viele csv daten in einer for-schleife ein
und speicher diese auf einem sql server
es gibt eine bestimmte anzahl spalten in der tabelle die sich nicht verändern darf
jedoch sind manche dateien fehlerhat und haben mehr spalten als die tabelle besitzten darf
also z.b. gibt es 21 spalten namen ala ID, Date, Name, ... etc.
und plötzlich taucht ein feld auf mit 24 spalten oder die komplett leer ist
das verursacht einen array overflow
ich muss aber dem server sagen
insert into tabelleA (ID,Date,Name,...) VALUES ('1','2012','Test',....)
das programm stürzt trotz try and catch ab
soll es aber nicht
es soll die fehlerhafte zeile einfach in eine andere tabelle speichern und
die nächsten zeilen wieder ganz normal weiter einlesen
wie schaffe ich es das ein programm nicht abstürzt sondern die fehlerhafte zeile überspringt
kann ich das einlesen der zeilen einfach in eine funktion stecken und diese dann im catchbereich aufrufen damit es weitergeht?
ich glaube aber eher das sowas schlecht wäre | |
Re: Array Index außerhalb des Arraybereichs | | | Autor: xirton | Datum: 01.07.12 20:34 |
| Ohne deinen Code, welcher das lesen und parsen der CSV übernimmt, schwierig zu sagen. Ich schätze mal, dass du einen Streamreader zum einlesen der CSV nutzt. Wenn du weist, wie viele Spalten die CSV maximal haben darf, dann zähl diese doch einfach intern in deiner for-Schleife mit, und ignorier alles, was danach kommt. Leere Zeilen kannst du auch einfach überprüfen, ehe du das parsen versuchst. | |
Re: Array Index außerhalb des Arraybereichs | | | Autor: Jenpet | Datum: 02.07.12 08:45 |
| den code darf ich leider nicht veröffentlichen
aber ja du hast recht ich benutze einen streamreader
hab gehofft dass man das vielleicht anders lösen kann
aber ok dann mache ich das so
vielen dank! | |
Re: Array Index außerhalb des Arraybereichs | | | Autor: Manfred X | Datum: 02.07.12 10:06 |
| Hallo!
Die einzelnen CSV-Zeilen kannst Du in einen String einlesen und diesen
String per Split(";"c) feldweise in ein String-Array übertragen,
dessen Länge geprüft werden kann (Length).
'Dateiinhalt lesen
Dim lines() As String = IO.File.ReadAllLines("....")
Dim geforderteFeldZahl As Integer = 5
'Und dann in einer Schleife die Zeilen checken
For i As Integer = 0 To lines.Length - 1
If lines(i).trim = String.Empty OrElse _
lines(i).Split(";"c).Length <> geforderteFeldZahl Then
'.........
End If
Next i MfG
Manfred | |
Re: Array Index außerhalb des Arraybereichs | | | Autor: FZelle (Moderator) | Datum: 02.07.12 10:21 |
| Klar kann man das, aber dazu müsste man ja wissen was Du verbrochen hast.
Bei der Fehlermeldung würde ich erstmal davon ausgehen das Du:
1. Trotz bekanntermassen variabler Feldanzahl array statt List(of) benutzt.
2. Laut Sourcecode die Parameter in den SqlString frickelst.
3. Nicht so wirklich verstanden hast wie Exceptions funktionieren.
Aber wie gesagt, ohne Source ( was soll daran so geheim sein wenn es Modular/OOP benutzt ??) ist das schwer zu sagen. | |
Re: Array Index außerhalb des Arraybereichs | | | Autor: Jenpet | Datum: 02.07.12 11:32 |
| ich hab den fehler jetzt entdeckt
warum mein catch abstürzt und nicht abgefangen wird und die nächsten zeilen weitergelesen werden
es lag am rollback dieses hat nicht richtig funktioniert
jetzt kann ich die fehlerhaften zeilen einfach überspringen | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|