'Système.ArgumentOutOfRangeException' s'est produite dans mscorlib.dll
Vous en remercie d'avance! Je suis en train d'écrire une application pour lire un fichier txt et d'écrire sur Excel. Commencer petit, je suis juste en train de lire la première ligne.
La Console.WriteLine correctement la chaîne de sortie (qui a des espaces entre les caractères), mais lorsque je tente d'extraire les caractères de la chaîne, j'obtiens cette erreur: informations Supplémentaires: Index et la longueur doit se référer à un emplacement dans la chaîne.
while ((input = stream.ReadLine()) != null)
{
//ACH HEADER LINE
if (iCurRecLine == 0 && input.IndexOf(HeaderBeginKeyWord) >= 0)
{
Console.WriteLine(input);
RepDate = input.Substring(23, 6).Trim();
RecordTypeCode = input.Substring(0, 1).Trim();
PriorityCode = input.Substring(1, 2).Trim();
ImmDestination = input.Substring(3, 10).Trim();
ImmOrigin = input.Substring(13, 10).Trim();
FileCreatedDate = input.Substring(23, 6).Trim();
FileCreatedTime = input.Substring(29, 4).Trim();
FileIDModifier = input.Substring(33, 1).Trim();
RecordSize = input.Substring(34, 3).Trim();
BlockingFactor = input.Substring(37, 2).Trim();
FormatCode = input.Substring(39, 1).Trim();
Destination = input.Substring(40, 23).Trim();
Origin = input.Substring(63, 23).Trim();
ReferenceCode = input.Substring(86, 8).Trim();
...
}
}
Où ai-je fait de mal?
Ce qui est imprimé ici:
Merci. La ligne de saisie est de ce genre, qui dispose de 94 caractères au total, les 8 derniers peuvent être blancs ou 0 (les x sont en fait des flans): 101x071000301x6759601771308202341f094101achxxxxxxxxxxxxxxxxxxxxfisxachxmilwaukeexxxxxxxx Lors de l'impression, il affiche correctement le x est vide. Pas sûr que sur les 8 derniers blancs.
Je suis conscient des sous-Chaînes de commencer à zéro. J'ai soigneusement examiné les index et la longueur et ils ont l'air OK pour moi. J'ai aussi essayé de modifier l'index et de la longueur du dernier champ après votre suggestion, mais toujours la même erreur...
Et si vous ne
bon appel. L'impression de la longueur de m'amène à regarder de plus près le fichier d'entrée, et découvre qu'ils ont soumis les 14 derniers caractères vides à la place des blancs. Merci à vous tous pour l'aide!
Console.WriteLine(input);
, ou mieux encore, comment est le champ de saisie?Merci. La ligne de saisie est de ce genre, qui dispose de 94 caractères au total, les 8 derniers peuvent être blancs ou 0 (les x sont en fait des flans): 101x071000301x6759601771308202341f094101achxxxxxxxxxxxxxxxxxxxxfisxachxmilwaukeexxxxxxxx Lors de l'impression, il affiche correctement le x est vide. Pas sûr que sur les 8 derniers blancs.
Je suis conscient des sous-Chaînes de commencer à zéro. J'ai soigneusement examiné les index et la longueur et ils ont l'air OK pour moi. J'ai aussi essayé de modifier l'index et de la longueur du dernier champ après votre suggestion, mais toujours la même erreur...
Et si vous ne
Console.WriteLine(input.Length)
, qu'est-ce que la production? Aussi, savez-vous sur quelle ligne que l'exception est levée?bon appel. L'impression de la longueur de m'amène à regarder de plus près le fichier d'entrée, et découvre qu'ils ont soumis les 14 derniers caractères vides à la place des blancs. Merci à vous tous pour l'aide!
OriginalL'auteur Hing-Lun Ma | 2013-09-06
Vous devez vous connecter pour publier un commentaire.
Il semble y avoir pas de validation dans le contenu du fichier que vous êtes en train de lire.
.SubString()
jette leArgumentOutOfRangeException
si lestartIndex plus de longueur indique une position au sein de cette instance.
Donc:
Pourrait facilement échouer et de se débarrasser de cette exception, si le
input
ne contient 10 caractères.+1: Cela s'est avéré être la bonne réponse: la ligne n'était pas aussi longtemps que il pensait que c'était. Il a juste besoin d'un peu d'encouragements pour le vérifier.
OriginalL'auteur Darren