Error using StringUtils

Fabrice La

Active Member
Licensed User
Longtime User
I am using this code :
LoadTableFromCSV(Dir As String,Filename As String,HeadersExist As Boolean)
Dim List1 As List
Dim h() As String
Dim headers As List
If HeadersExist Then
List1 = StringUtils1.LoadCSV2(Dir, Filename, ",", headers)

Dim h(headers.Size) As String
For i = 0 To 9
h(i) = headers.Get(i)
Next
end if
end sub

And I using these files :
"Date,Catégorie,Affaire,Somme remboursée,Somme entrée,TVA,Devise,Change,num
2/05/2012,3- déjeuner Seul(e),Exemple,5.60,10.05,0.66,EUR-Euro,1,1"
It's working

With this one, not working ??
"Date,Catégorie,Affaire,Somme remboursée,Somme entrée,TVA,Devise,Change,num
156927E191A6C9153A6149F7CE6275B6,759CE9C0A79F5DA525F0C07DF00A11F11FF9450436FC2120C30E015578384DC5,3A6A18B00619D6FDC30E015578384DC5,BD465840CE8370EEC30E015578384DC5,B56AB9B57B4B78ABC30E015578384DC5,5339675965EB4B7DC30E015578384DC5,ED674C17FB3E0CAAC30E015578384DC5,A7F0588E0BAC859AC30E015578384DC5"
:BangHead:
 

Fabrice La

Active Member
Licensed User
Longtime User
The log

List1 = StringUtils1.LoadCSV2(Dir, Filename, ",", headers)

java.lang.StringIndexOutOfBoundsException: length=963; regionStart=930; regionLength=-931
at java.lang.String.startEndAndLength(String.java:593)
at java.lang.String.substring(String.java:1474)
at anywheresoftware.b4a.objects.StringUtils.ReadWord(StringUtils.java:258)
at anywheresoftware.b4a.objects.StringUtils.LoadCSV2(StringUtils.java:222)
at flcc.ndfandroidv31.fsaisies._loadtablefromcsv(fsaisies.java:1195)
at flcc.ndfandroidv31.fsaisies._activity_resume(fsaisies.java:535)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:136)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:120)
at flcc.ndfandroidv31.fsaisies.afterFirstLayout(fsaisies.java:90)
at flcc.ndfandroidv31.fsaisies.access$100(fsaisies.java:16)
at flcc.ndfandroidv31.fsaisies$WaitForLayout.run(fsaisies.java:72)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4507)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
java.lang.StringIndexOutOfBoundsException: length=963; regionStart=930; regionLength=-931
 
Upvote 0

Robby

Member
Licensed User
Longtime User
Same Stringutils problem out of bounds

I am using same code as below and getting same out of bounds error.
Testing using several csv files derived from same xls. Zip file attached includes ones that work (files ending in 313) and others that don't. get out of bounds errors. Very frustrating. All files work OK as .txt. Error messages below. Any ideas?



Dim List1 As List
Dim h() As String
Dim headers As List
If HeadersExist Then
List1 = StringUtils1.LoadCSV2(Dir, Filename, ",", headers)
Dim h(headers.Size) As String
For i = 0 To headers.Size - 1
h(i) = headers.Get(i)
Next
End If

LogCat connected to: B4A-Bridge: LGE Nexus 4-355136050781478
--------- beginning of /dev/log/main
main_loadtablefromcsv (B4A line: 130)
List1 = StringUtils1.LoadCSV2(Dir, Filename, ",", headers)
java.lang.StringIndexOutOfBoundsException: length=9990; regionStart=9988; regionLength=-9989
at java.lang.String.startEndAndLength(String.java:583)
at java.lang.String.substring(String.java:1464)
at anywheresoftware.b4a.objects.StringUtils.ReadWord(StringUtils.java:258)
at anywheresoftware.b4a.objects.StringUtils.LoadCSV2(StringUtils.java:222)
at b4a.rncheck.main._loadtablefromcsv(main.java:801)
at b4a.rncheck.main._filelistview1_itemclick(main.java:634)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at anywheresoftware.b4a.BA$2.run(BA.java:272)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
sending message to waiting queue (CallSubDelayed - UpdateStatus)
Connected to B4A-Bridge (Wifi)
sending message to waiting queue (CallSubDelayed - UpdateStatus)
Installing file.
PackageAdded: package:b4a.rncheck
Installing file.
PackageAdded: package:b4a.rncheck
 

Attachments

  • Stringutils check.zip
    32.1 KB · Views: 254
Upvote 0

klaus

Expert
Licensed User
Longtime User
The problem is, as Erel already said :
All rows must have the same number of fields.
In your file Frequencies AIRAC 31312.csv
there should be 21 fields per row according to the Header row.
If you look at line 'AIRAC South,Bourn ,EGSN ,,,,,,,,,124.350,,,,,, ' you don't have 21 fields !

Best regards.
 
Upvote 0

Robby

Member
Licensed User
Longtime User
Thanks for spotting the extra commas. Excel is spuriously adding them to the header row during conversion from xls to csv.
 
Upvote 0
Top