Substring e PadRight

lunedì 13 agosto 2012 - 16.02
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Visual Studio 2008  |  MySQL 5.5

Mau67 Profilo | Expert

Ciao al forum,
in questa parte di codice che vi mostro dovrei inserire il substring per delimitare il testo da immettere e la lungheza (padright) per il prossimo campo da scrivere, il problema che se inserisco solo due stringhe con substring e padright il programma non mi genera errore appena aumento le stringhe mi genera il seguente errore:
"Index e Lenght devono fare riferimento a una posizione nella stringa. nome Parametro: lenght"

Questo è il codice

''---- codice 20000000X -----
tmp = " " & "2" & idCount.ToString().PadLeft(8, Char.Parse("0"))
tmp = tmp & CStr("" & rigaOrdinante("DescrizioneOrdinante").Substring(0, 30)).ToString().PadRight(30, Char.Parse(" "))
tmp = tmp & CStr("" & rigaOrdinante("IndirizzoAccredito").Substring(0, 30)).ToString().PadRight(30, Char.Parse(" "))
tmp = tmp & CStr("" & rigaOrdinante("DescrizioneOrdinante1")).ToString().PadRight(30, Char.Parse(" "))
tmp = tmp & CStr("" & rigaOrdinante("CodiceFiscale")).ToString().PadRight(20, Char.Parse(" "))
wrf.WriteLine(tmp)
totRow = totRow + 1
''---------------------------

''---- codice 30000000X -----
tmp = " " & "3" & idCount.ToString().PadLeft(8, Char.Parse("0"))
tmp = tmp & CStr("" & rigaCorr("Cognome")) & " " & CStr("" & rigaCorr("Nome"))
tmp = tmp & rigaCorr("CodiceFiscale").ToString().PadLeft(87, Char.Parse(" ")) ''Questo codice Fiscale è relativo al beneficiario
wrf.WriteLine(tmp)
totRow = totRow + 1
''---------------------------
come posso ovviare all'errore perchè io in tutte le stringhe devo delimitare i caratteri e la distanza con il prossimo campo?
Grazie in anticipo
Mau67

alextyx Profilo | Expert

Un po' di corsa, cerco di capire.....
l'errore che ricevi praticamente ti dice che presumi di avere più caratteri nella stringa di quanti tu effettivamente ne abbia. Non ho capito quali sono le stringhe che riesci ad inserire e su quale ti dà invece errore. Così di getto, direi che potrebbe essere il metodo substring a cui indichi di selezionare 30 caratteri, in una stringa in cui i 30 caratteri non ci sono. Blocca il codice dove ti dà errore e conta i caratteri, oppure esegui il metodo substring nella finestra di debug e vedi che ti dice. Io penso sia una stringa più corta del previsto e se non mi sfugge qualche altra cosa, penso che il problema ti venga sul substring, che applichi prima del pad

Mau67 Profilo | Expert

si effettivamente l'errore me lo da quando metto il substring in questa stringa
tmp = tmp & CStr("" & rigaOrdinante("DescrizioneOrdinante1")).ToString().PadRight(30, Char.Parse(" "))
come faccio ad ovviare a questo anche perchè se i caratteri aumentano mi sposta di posizione la stringa successiva, invece le stringhe devono rimanere sempre nella stessa posizione.
grazie
Mau67

alextyx Profilo | Expert

Scusa se intervengo sempre come se la sedia mi scottasse, ma ho una serie di cose ancora da sistemare e dedico poco tempo ai forum e alla programmazione, purtroppo.
Se ho capito bene, generalizzando il problema, tu vuoi che, qualora il contenuto di una riga ecceda i 30 caratteri, questa venga tagliata al massimo, a 30 caratteri.
Se è così, devi controllare la lunghezza della stringa, mi pare sia la proprietà count e se questa eccede i 30 caratteri, applichi il substring, altrimenti no.
Se non ho capito, ritenterò con qualche informazione in più che vorrai passarmi
Se devi fare operazioni ripetitive su più stringhe, valuta la possibilità di utilizzare una funzione alla quale passi la stringa come argomento, che su di essa esegue i controlli e le operazioni necessarie, restituendoti poi la stringa pronta all'uso come serve a te.
Ciao

Mau67 Profilo | Expert

grazie ho risolto se serve a qualcuno
If rigaOrdinante("DescrizioneOrdinante1").Length.ToString() < 30 Then
tmp = tmp & CStr("" & rigaOrdinante("DescrizioneOrdinante1")).ToString().PadRight(30, Char.Parse(" "))
Else
tmp = tmp & CStr("" & rigaOrdinante("DescrizioneOrdinante1").Substring(0, 30)).ToString().PadRight(30, Char.Parse(" "))
End If

cia grazie alla prossima, buon ferragosto a tutti
Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5