Entwickler-Ecke
C# - Die Sprache - string.split() problem?
sharpx - Mi 07.01.09 10:17
Titel: string.split() problem?
Hallo
Folgende Ausgangssituation:
1) Einlesen einer Textdatei mit E-Mail Adressen
2) E-Mail Adressen sind durch , von einander getrennt
3) Versenden von Daten an diese E-Mail Adressen
Mein Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| public static string[] filter_emails (string email) { string[] sub = new string[500]; if (email.IndexOf(',') <= 0) return sub; else { sub = email.Split(','); for (int i=0; i < sub.Length; i++) { sub[i] = sub[i] + "\r\n"; sub[i] = sub[i].Trim(); } } return sub; }
void Button1Click(object sender, EventArgs e) { string[] sa = new string[500]; sa = filter_emails(mail);
if (sa[0] == null) { } else { int length = count_elements(sa); for (int i=0; i < length; i++) { send_email (sa[i]); } } |
Die send_email Funktion funktioniert einwandfrei, wenn ich z.b solch eine e-mail übergebe "test@hotmail.com". Nun aber, wenn ich das Programm so laufen lasse, bekomme ich folgenden Fehler:
Zitat: |
System.FormatException: Die angegebene Zeichenfolge besitzt nicht das für eine E-Mail-Adresse erforderliche Format.
bei pdfinside.MainForm.write_email(String mailto) in c:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\MainForm.cs:Zeile 174.
bei pdfinside.MainForm.Button1Click(Object sender, EventArgs e) in c:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\MainForm.cs:Zeile 297.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei pdfinside.Program.Main(String[] args) in c:\Dokumente und Einstellungen\lipo\Eigene Dateien\SharpDevelop Projects\pdfinside\Program.cs:Zeile 28.
|
Nun dachte ich mir, okay wahrscheinlich gibts bei dem getrimmten string ein zeichen, welches den string als "invalid email" darstellt. Habe kurz folgenden Code geschrieben:
[cs]
for (int k = 0; k<sa[0].Length; k++)
{
MessageBox.Show(sa[0][k].ToString());
}
[cs]
Die Ausgabe ist folgende:
Zitat: |
t
e
s
t
@
t
e
s
t
.
d
e
|
Sieht alles eigentlich gut aus. (Keine leerzeichen, keine Umbrüche...)
Hoffe jemand kann mir hier weiterhelfen.
Danke!
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
lothi - Mi 07.01.09 10:31
Hallo
Aber dein String sieht so aus:
test.test.de
in einer E-Mail Adresse sollte doch auch das @ enthalten sein.
Gruss Lothi
JüTho - Mi 07.01.09 11:40
Seit wann wird eine Email-Adresse mit einem Environment.NewLine abgeschlossen?
Unabhängig vom konkreten Problem möchte ich noch darauf hinweisen (dabei gehe ich davon aus, dass die Variable mail keine, eine oder mehrere Email-Adressen mit Komma getrennt enthält):
C#-Quelltext
1:
| string[] sub = new string[500]; |
Das new ist hier 2x eher unnötig. Du benötigst es nur dann, wenn es sich in der filter-Methode um 0 oder 1 Adressen handelt; in allen anderen Fällen wird sub bzw. sa sowieso neu erzeugt.
C#-Quelltext
1: 2:
| sub[i] = sub[i] + "\r\n"; sub[i] = sub[i].Trim(); |
Wenn überhaupt, sollte zuerst getrimmt werden. Ich kann aber überhaupt keinen Sinn darin sehen, dass an eine Email-Adresse ein
Environment.NewLine angehängt wird (das ist sowieso besser als "\r\n").
Gruß Jürgen
PS. Füge bitte in das Zitat der Fehlermeldung am Ende 2x CR/LF ein, damit der Umbruch besser wird.
sharpx - Mi 07.01.09 12:12
Danke euch beiden!
@lothi:
Mein Fehler, natürlich steht da ein @ drinnen, hab mich nur verschrieben.
Im Post ists jetzt ausgebessert.
@Juergen:
DAnke für deine Ratschläge, hat leidern nichts geholfen
JüTho - Mi 07.01.09 12:26
sharpx hat folgendes geschrieben : |
hat leidern nichts geholfen |
Dann musst Du die send_email-Methode in try-catch einbetten, die konkret kritisierte Adresse durch MessageBox anzeigen und genau untersuchen. So können wir nur weiterraten. Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!