String^ signtmp = "\"";
array<String^>^ fbnum;
array<String^>^ fbname;
array<String^>^ fbtemp;
char divide;
StreamReader^ temp = File::OpenText("F:\\Schule\\Mobile
Kommunikationssysteme\\Wipro\\#Praktiumsthema\\Telefonbuch2.txt");
String^ entry;
entry = temp->ReadToEnd();
int write = 0;
array<Char>^ centry = entry->ToCharArray(0,entry->Length);
for(int i=0;i<entry->Length;i++)
{
char entrtmp = centry[i];
if(Convert::ToString(centry[i])->Contains(signtmp))
{
if(write == 4)
write = 1;
else
write++;
if(write == 1)
# fbnum[i] = Convert::ToString(centry[i]);
else if(write == 3)
fbname[i] = Convert::ToString(entrtmp);
}
else
if(write == 1)
fbnum[i] = Convert::ToString(entrtmp);
else if(write == 3)
fbname[i] = Convert::ToString(entrtmp);
}
Aaaalso...
Dieser Code hat die Aufgabe, aus dem Char-Array centry die "
herauszufinden. Beim Ersten gefundenen werden alle folgenden Zeichen in
fbnum aufgezeichnet und beim Zweiten gefundenen wird die Aufzeichnung
beendet. Beim Dritten gefundenen werden alle folgenden Zeichen in fbname
aufgezeichnet und beim Vierten gefundenen wird die Aufzeichnung beendet.
Wird nun das erste " gefunden, steht an der Stelle in centry[i] "".
Wird nun an der Stelle # versucht den Inhalt von centry[i] in fbnum[i]
zu schreiben, tritt dieser Fehler auf: Object reference not set to an
instance of an object.
Verwende ich einen einfachen String^, dann wird das entsprechende
Zeichen auch richtig gespeichert.
Ich vermute das Problem irgendwie in den Array-Typen...
Du hättest in der Betreffzeile noch darauf hinweisen können, daß das
weder C noch C++, sondern "Managed C++" (eigentlich "mangled c++"), die
Dot.Net-MS-verquarkung von C++ ist.
Übrigens bietet dieses Forum Syntaxhighlighting an, dazu muss der
betreffende Abschnitt nur in [ c ] und [ / c ] eingeschlossen werden
(ohne Leerzeichen).
1
String^signtmp="\"";
2
array<String^>^fbnum;
3
array<String^>^fbname;
4
array<String^>^fbtemp;
5
chardivide;
6
StreamReader^temp=File::OpenText(pfadname);// zeile wäre sonst zu lang
Könnte das von Dir geschilderte Problem daran liegen, daß Du fbnum
"lückig" beschreibst?
Du schreibst ja nur nach fbnum, wenn "write" eins ist, verwendest aber
dennoch denselben Index.
Also könnte es sein, daß Du fbnum[1] beschreibst und danach versuchst,
fbnum[4] zu beschreiben (indices sind rein willkürlich).
Unterstützt denn "mangled c++" so etwas wie Arrays mit Lücken?
ja das funktioniert. Verwende ich statt fbnum[i] einen gewöhnlichen
String, wird der Inhalt richtig zugewiesen.
centry = "1001,"0151...
Beim ersten (also hier dem zweiten) " tritt das Problem auf, eben dann
wenn geschrieben werden soll. Gebe ich statt fbnum[i] fbnum[i++] an
(also auf die 0 verweisend), dann übergeht er die 0 und nimmt die 1,
aber auch dann bleibt das Problem bestehen.
Tja, da muss ich Dich hilflos zurücklassen, denn mit "mangled c++" kenne
ich mich nicht weiter aus.
Mir erscheint es nicht sinnvoll, in einer for-Schleife mit Index i den
Index an anderer Stelle zu ändern ... aber das wird nicht Dein Problem
sein.
Du könntest ja mal versuchen, die nicht funktionierende Zuweisung zu
isolieren, also den ganzen restlichen Krempel drumherum wegzulassen.
Also, nochmal langsam:
Bereits mein "dreizeiler" funktioniert nicht? Dann sind, wie ich
vermutet habe, "lückige" Arrays in "mangled c++" wohl wirklich nicht
vorgesehen.
Naja, wie dem auch sei, viel Erfolg!
Ich hab ja versucht das Array von Anfang an zu füllen. Es liegt wohl an
der Art und Weise wie ich dort Daten speichern will. Denn fbnum[i] =
"jkhg"; funktioniert auch nicht.
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.