Spalte einlesen und Zellen vergleichen
-
hier betrachte ich die levels gar nicht.... und das war die frage, wie ich das hier irgendwie mit berücksichtigen kann und dann eben wie bei dem einen beispiel von benutzer abfe die neuen keys, die nach dem level zusammen gesetzt worden sind ind die map lade. dann kann ich bei der eingabe auch den zusammengesetzen key eingeben und bekomme die richtige adresse raus.
ich hoffe ich hab mich jetzt nicht unklar ausgdrückt oder so
-
hat einer ne idee???? ich bin immer noch nicht schlauer geworden....
-
Hallo YumiFerrari,
YumiFerrari schrieb:
hat einer ne idee???? ich bin immer noch nicht schlauer geworden....
nein - bist Du anscheinend nicht.
Wenn Du hier Hilfe bekommen möchtest, so biete es sich an, konkrete Fragen zu einzelnen Code-Stellen oder ähnliches zu stellen. Du kannst auch fragen, wie man ein bestimmtes Problem löst, aber Du stellst hier Code ein, der schwer zu lesen ist, Syntaxfehler enthält und bei dem nicht nachzuvollziehen ist, in wie weit der Code was mit Deinem anfangs geschilderten Problem zu tun hat.In Deinem ersten Beitrag dieses Threads geht es z.B.: um Level, Name und Adresse. Davon ist in Deinem Code nichts mehr zu finden.
YumiFerrari schrieb:
hier betrachte ich die levels gar nicht.... und das war die frage, wie ich das hier irgendwie mit berücksichtigen kann und dann eben wie bei dem einen beispiel von benutzer abfe die neuen keys, die nach dem level zusammen gesetzt worden sind ind die map lade. dann kann ich bei der eingabe auch den zusammengesetzen key eingeben und bekomme die richtige adresse raus.
Von 'Name' und 'Adresse' ist nichts mehr zu sehen, dafür scheinen in der Datei Dinge wie "STRING" und "]" vor zukommen. Wie sieht denn diese Datei jetzt aus - das gleiche Format wie oben kann es nicht sein.
Es wird Dir niemand sagen können, wie/wo der Level 'zu berücksichtigen' ist, weil gar nicht klar ist, was der Code unten mit der Problemschilderung oben zu tun hat.
Versuche doch mal, uns zu erklären, was der Input Deines geplanten Programms ist und was als Output erwartet wird; am besten an Hand eines Beispiels.
Gruß
Werner
-
Hey,
danke für die rückmeldung.... also das mit level name adresse war eigentlich nur ein beispiel gewesen....
den code habe ich reingestellt, weil ich nicht genau wusste, wo ich genau die veränderung vornehmen kann.... aber grad bin ich soweit, dass ich weiß, wo genau ich das ansetzen muss.....gib mir kurz zeit, dann schilder ich den aktuellen standpunkt mit einer konkreten frage
-
die spalten sehen so aus.
tagtype; level; shortname; rtnameDie lese ich alle ein, was auch soweit klappt. Nun ist das so, dass ich verschiedene Levels (genau 6)habe. von denen ist es abhängig, was für ein Shortname herraus kommt. daher habe ich versucht levelContent1 - levelContent6 anzulegen, dass der inhalt in den pointer geladen wird.
hierbei bekomme ich eine fehlermeldung. error C2440: '=': 'char *' kann nicht in 'int' konvertiert werden
woran liegt das denn?C++ Code:
getline(MyFile, String); if (String != Line) // If the line is not empty { Line = String; pointer_mychar = &String[0]; pointer_mychar = strtok(pointer_mychar, delimiter); int i=0; int pairfind = 0; while(pointer_mychar != NULL) { if (i>=MinColumnSize && i< MaxColumnSize) // Reading necessary column only. { if (pairfind == 0) { tagType = pointer_mychar; // First column is the tagType pairfind = 1; } else if (pairfind == 1) { level = pointer_mychar; // Second column is the level pairfind = 2; } else if (pairfind == 2) { shortName = pointer_mychar; // third column is the short Name string levelContent1; string levelContent2; string levelContent3; string levelContent4; string levelContent5; string levelContent6; if (level = 1){ levelContent1 = pointer_mychar; } else if ( levelContent2 = 2){ levelContent = pointer_mychar; } else if ( levelContent3 = 3){ levelContent = pointer_mychar; } else if ( levelContent4 = 4){ levelContent = pointer_mychar; } else if ( levelContent5 = 5{ levelContent = pointer_mychar; } else if ( levelContent6 = 6{ levelContent = pointer_mychar; } pairfind = 3; } else if(pairfind == 3) { rtName = pointer_mychar; // fourth column is the rtName which will be analyzed here pairfind = 4; } else { datatypeStringFromTable = pointer_mychar; dataTypeNumRep = i; pairfind = 0; // Resetting pairfind for a new round } } pointer_mychar = strtok(NULL, delimiter); i++; } } else { break; }
-
Hallo YumiFerrari,
Ich unterstelle mal, dass der genannte Compile-Error in den Zeilen 15 und/oder 18 und/oder 21 passiert.
Das liegt daran, dass von den VariablentagType
,level
odershortName
mindestens einer vom Typint
ist - und Du kannst keinenchar*
einemint
zuweisen.Es wäre hilfreich, wenn Deine geposteten Codeschnipsel in sich vollständig sind; dazu gehören mindestens alle Typangaben der verwendeten Variablen.
Gruß
Werner
-
..
-
.. irgendwie funktioniert das Editieren nicht mehr
-
string tagType; // The tag type from the CSV file string level; // level from the csv file string shortName; // The short name given in the CSV file string rtName; // The rtName given in the CSV file string datatypeStringFromTable; // The data Type given in the CSV int dataTypeNumRep; // An integer representation of the datatypeStringFromTable ODK_DATA_STRUCT dataStruct; // The data struct to be filled vector<string> v; // Initing the vector where we are going to put the two parts of the rtName
ich glaube das sollte es sein...
bei mir zeigt es immer die zeilen ab 31 an... das mit dem levelContent... das habe ich auch neu hinzugefügt, weil ich den inhalt eben haben wollte.
-
hoppaallaaa ich seh ein fehler bei dem code.
eigentlich sollte das so aussehen.
if (level = 1){ levelContent1 = pointer_mychar; } else if ( levelContent2 = 2){ levelContent2 = pointer_mychar; } else if ( levelContent3 = 3){ levelContent3 = pointer_mychar; } else if ( levelContent4 = 4){ levelContent4 = pointer_mychar; } else if ( levelContent5 = 5{ levelContent5 = pointer_mychar; } else if ( levelContent6 = 6{ levelContent6 = pointer_mychar; }
-
YumiFerrari schrieb:
bei mir zeigt es immer die zeilen ab 31 an... das mit dem levelContent...
Ah - stimmt, ich habe es vor lauter undefinierten Variablen nicht gleich gesehen.
YumiFerrari schrieb:
string level; // level from the csv file if (level = 1){ levelContent1 = pointer_mychar; }
hinter dem
if
wird nicht verglichen, sondern zugewiesen, wenn überhaupt muss es heißenstring level; // level from the csv file if (level == "1"){ levelContent1 = pointer_mychar; }
.. die anderen Zeilen entsprechend
Gruß
Werner
-
also ich habe das jetzt so umgeändert, aber jetzt kommt folgende fehlermeldung
error C2446: '==': Keine Konvertierung von 'const char *' in 'int'
-
ich bin grad am überlegen, ob die logik stimmt... ich möchte ja gerne das anhand des levels der ShortName sich zusammen setzt. ( der Shortname soll sich zusammen setzen, weil ich später den als Key in meine map lade)
dafür vergleiche ich immer den level und möchte dann den passenden shortName dem pointer zuweisen. muss ich dann bei der if () level hinschreiben oder levelContent ? level ist eigentlich die spalte bzw der der level der zeile von dem shortName und levelContent soll ja eigentlich der shortName sein.
-
YumiFerrari schrieb:
also ich habe das jetzt so umgeändert, aber jetzt kommt folgende fehlermeldung
error C2446: '==': Keine Konvertierung von 'const char *' in 'int'
.. das glaube ich nicht! poste mal den Code der Zeile mit der Fehlermeldung und die komplette Fehlermeldung.
-
ahhh sry, das funktioniert. das hatte eben nur mit meiner verwirrung zu tun gehabt, dass ich da levelContent1 hatte und nicht level. aber jetzt klappt das. yeah danke
nun komme ich aber zu der nächsten frage......
ich lade shortname und rtname in die map. nur shortname kann ich leider nicht so in die map laden, weil die öfters mit der selben bezeichnung vorkommt. daher habe ich jetzt auch die levels mit eingelesen. nun möchte ich gerne, dass ich den genauen pfad zusammen setze...
sprich das beispiel von anfangs...
Level Name Adresse
1 A 123
2 B 234
3 C 345
3 D 456
4 E 567
3 F 678
4 E 789Key rtName
A 123
A.B 234
A.B.C 345
A.B.D 456
A.B.D.E 567
A.B.F 678
A.B.F.E 789Da hat mir ja auch der Benutzer abfe ein beispiel genannt.... hm aber ich dachte ich lege einfach eine medothe key an, bevor das in die map geladen wird. key setzt sich dann ja aus den shortnames zusammen. nur ich weiß jetzt nicht genau wie ich diese methode erstellen kann. sprich ich muss ja sagen, dass die levels immer vergleichen werden, damit man das zusammen setzen kann... hast du da vllt eine idee?
-
theoretisch habe ich den inhalt also was im shortname steht bei levelContent geladen. muss jetzt die levels immer abfragen und die dann zusammen setzen mit einem punkt dazwischen.... Wie kann man das am besten machen? dieses strcat ist nicht dafür geeignet oder?
-
YumiFerrari schrieb:
theoretisch habe ich den inhalt also was im shortname steht bei levelContent geladen. muss jetzt die levels immer abfragen und die dann zusammen setzen mit einem punkt dazwischen.... Wie kann man das am besten machen? dieses strcat ist nicht dafür geeignet oder?
Nun ja - strcat ist ein C-Funktion, mit der man Strings aneinander hängen kann.
Jetzt befinden wir uns hier zum einen im C**++**-Forum und zum anderen hat Dir abfe bereits eine Lösung (in C++) vorgeschlagen, die knapp 20 Zeilen umfasst. Selbst wenn man dort diemap
noch hinzufügt, wird es keine 30 Zeilen lang werden.Du dagegen postest hier ein 300-Zeilen Programm, das den Namen 'Programm' nicht verdient und mit der Tendenz 'weiter wachsend'. Dieses Programm möchtest Du nun unbedingt erweitern, und von uns verlangst Du, Deinen Gedankengängen zu folgen, von denen Du uns immer wieder ein paar Brocken hinwirfst.
YumiFerrari so wird das nichts!
Versuche doch, Algorithmus und Programmcode von abfe zu verstehen. Wenn Du das hin bekommen hast, kannst Du es ja gerne noch mal coden. Wenn zu abfes Code Fragen sind, so frage.Gruß
WernerPS.: das Aneinander-Hängen der Namen mit '.' geschieht bei abfe in Zeile 15.