Entwickler-Ecke
Basistechnologien - Ausgabe der Tabellennamen verhindern!
M-Cha - Di 24.11.09 10:27
Titel: Ausgabe der Tabellennamen verhindern!
Ich habe eine Anwendung die eine Textdatei durchsucht und dann Tabellenausgibt! Zusätzlich wird überprüft, dass doppelte Tabellennamen nicht ausgegeben werden!
Jetzt möchte ich noch, das er manche Tabellennamen die ich definiere, nicht ausgeben soll! Zum Beispiel den Tabellennamen "test" soll er nicht ausgeben. Wie stelle ich das an.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if (match2.Success) { string tabellenname3 = match2.Groups[2].Value;
if (!tablestemp.Contains(tabellenname3)) { tablestemp.Add(tabellenname3); } } |
bakachan - Di 24.11.09 10:37
Indem du vor dem hinzufügen überprüfst ob der Tabellenname "test" ist?! :gruebel:
Also sorry ich glaub ich versteh deine Frage nicht oder wenn doch hast du dir die Frage doch schon selbst beantwortet bzw es gehört zu den absoluten Grundlagen.
M-Cha - Di 24.11.09 10:46
Ja auch feste Tabellennamen erweiter ich halt den Patter dann das weiß ich ja!
Aber um zu wissen, welche Tabellennamen nicht ausgegeben werden sollen, muss ich vorher die Tabellennamen pattern und dann kann ich erst sagen, das diese nicht vorkommen sollen!
bakachan - Di 24.11.09 11:08
An irgendeiner Stelle in deinem programm musst du ja auf irgendeine Weise erfahren welche Tabellennamen nicht ausgegeben werden sollen. Dann setz die Überprüfung doch an der Stelle oder beim hinzufügen zur liste oder spätestens kurz vor der Ausgabe.
Sorry aber aus deiner Formulierung kann ich keinerlei klare Informationen ziehen und somit auch nicht effektiv helfen.
M-Cha - Di 24.11.09 11:47
Also ich habe eine Textdatei die ich mit Regex durchgehe und patter!
Er gibt mir jeweils die Sachen Tabellen aus, die nach Verein, Platz oder Spiel stehen. Jetzt wird es noch einen Patter geben, der erstmal rausfindet, welche Tabellen NICHT ausgegeben werden sollen!
Zusätzlich zu der Überprüfung ob eine Tabelle doppelt ist, soll überprüft werden ob es Tabellen gibt die nicht ausgegeben werden sollen!
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| string pattern = @"((?i)(Verein)|(PLATZ)|(SPIEL)|(\s))* (?<1>.*?) .*"; Match match3 = Regex.Match(fd[i].Value, pattern);
if (match3.Success) { string tabellenname = match3.Groups[1].Value;
if (!tablestemp.Contains(tabellenname)) { tables.Add(tabellenname); } } |
Tabellen die nicht ausgegeben werden sollen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Regex Zliga = new Regex("(?i)(2.Liga\\s).*?\\.\\s", RegexOptions.Singleline); MatchCollection dt = ZLiga.Matches(inhalt);
for (int a = 0; a < dt.Count; a++) { string pattern2 = @"((?i)(2.Liga)|(\s))+(?<2>[^\s\(]+)"; Match match2 = Regex.Match(dt[a].Value, pattern2);
if (match2.Success) { tname3 = match2.Groups[2].Value; } |
bakachan - Di 24.11.09 12:07
M-Cha hat folgendes geschrieben : |
| Also ich habe eine Textdatei die ich mit Regex durchgehe und patter! |
Als erstes mal etwas für dein verständnis:
Du matcht mit dem Regex. (Regex.Match)
Das Pattern ist nur das Muster auf das gematcht wird.
M-Cha hat folgendes geschrieben : |
| Jetzt wird es noch einen Patter geben, der erstmal rausfindet, welche Tabellen NICHT ausgegeben werden sollen |
Speicher die die Namen die nicht vorkommen dürfen in einer Liste.
M-Cha hat folgendes geschrieben : |
Zusätzlich zu der Überprüfung ob eine Tabelle doppelt ist, soll überprüft werden ob es Tabellen gibt die nicht ausgegeben werden sollen!
|
Wie ich am Anfang gesagt habe:
Überprüfung vorm Hinzufügen (also an der gleichen Stelle wo auch deine andere Bedingung steht)
Quelltext
1: 2:
| if(!doppelt && !verboten) ... |
M-Cha - Di 24.11.09 13:40
Also mir fehlt jetzt nur der Umsetzungsgedanke.
Ich habe meine Anwendung hier:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| for (int i = 0; i < fd.Count; i++) { string pattern = @"((?i)(VEREIN)|(PLATZ)|(SPIEL)|(\s))* (?<1>.*?) .*"; Match match3 = Regex.Match(fd[i].Value, pattern);
if (match3.Success) { string tabellenname = match3.Groups[1].Value;
if (!tables.Contains(tabellenname)) { tables.Add(tabellenname); } } } |
und hier jetzt den Regex mit den Tabellen die nicht angezeigt werden dürfen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Regex ZLiga = new Regex("(?i)(2.Liga).*?\\.\\s", RegexOptions.Singleline); MatchCollection bf = ZLiga.Matches(inhalt);
for (int j = 0; j < bf.Count; j++) { string pattern3 = @"((?i)(2.Liga)|(\s))*(?<1>.*?) .*"; Match match4 = Regex.Match(bf[i].Value, pattern3);
match4.Groups[1]; } |
Wie Baue ich das jetzt in den oberen Teil ein?
bakachan - Di 24.11.09 13:53
M-Cha hat folgendes geschrieben : |
| Wie Baue ich das jetzt in den oberen Teil ein? |
Wenn du meinen Beitrag direkt darüber mal aufmerksam lesen würdest hättest du deine Antwort schon.
bakachan hat folgendes geschrieben : |
Speicher die die Namen die nicht vorkommen dürfen in einer Liste.
.
.
.
Überprüfung vorm Hinzufügen (also an der gleichen Stelle wo auch deine andere Bedingung steht)
Quelltext 1: 2:
| if(!doppelt && !verboten) ... | |
M-Cha - Di 24.11.09 13:56
Also gelesen habe ich es ja schon.
Nur das mit der Liste. Wie soll das funktionieren?
In einen
Collection<string> oder
List<string> ??
So vielleicht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Regex ZLiga = new Regex("(?i)(2.Liga).*?\\.\\s", RegexOptions.Singleline); MatchCollection bf = ZLiga.Matches(inhalt);
for (int j = 0; j < bf.Count; j++) { string pattern3 = @"((?i)(2.Liga)|(\s))*(?<1>.*?) .*"; Match match4 = Regex.Match(bf[i].Value, pattern3);
tablesbuffer.Add(tabellennamebuffer); } |
und dann unten einfach prüfen auf:
C#-Quelltext
1: 2: 3: 4:
| if (!tables.Contains(tabellenname) && !tablesbuffer.Contains) ) { tables.Add(tabellenname); } |
Aber ich habe da keinen Zugriff auf die Variable die angegeben werden muss !
Bekomme die FOR-Schleifen nämlich nicht zusammen!
bakachan - Di 24.11.09 14:04
Irgendeine Art Liste benutzt du doch im oberen Teil auch (tables).
Analog dazu wirst du das gleiche Prinzip doch wohl auch auf deine namen anwenden können.
M-Cha - Di 24.11.09 14:10
bakachan hat folgendes geschrieben : |
Irgendeine Art Liste benutzt du doch im oberen Teil auch (tables).
Analog dazu wirst du das gleiche Prinzip doch wohl auch auf deine namen anwenden können. |
Ja ich benutzte diese:
C#-Quelltext
1:
| public Collection<string> tables = new Collection<string>(); |
Bekomme die aber nicht zusammen! Sind ja zwei FOR-Schleifen! Der obere Teil ist der Hauptteil. Und die FOR-SCHLEIFE (Tabellennamen dich nicht ausgegeben werden sollen) ist ja auch noch da!
bakachan - Di 24.11.09 14:15
Du musst da auch nix zusammenkriegen.
2 Aufgaben -> 2 Schleifen -> 2 Listen
und da du die Liste mit den namen ja für die auswahl der tables brauchst wirst du die namen wohl vorher zusammenstellen lassen müssen.
Ich versteh absolut nicht wo dein problem ist, mal davon abgesehen davon das dir anscheinend so ziemlich alle Grundlagen und jegliche eigeninitiative fehlen.
M-Cha - Di 24.11.09 14:27
bakachan hat folgendes geschrieben : |
Irgendeine Art Liste benutzt du doch im oberen Teil auch (tables).
Analog dazu wirst du das gleiche Prinzip doch wohl auch auf deine namen anwenden können. |
bakachan hat folgendes geschrieben : |
Du musst da auch nix zusammenkriegen.
2 Aufgaben -> 2 Schleifen -> 2 Listen
und da du die Liste mit den namen ja für die auswahl der tables brauchst wirst du die namen wohl vorher zusammenstellen lassen müssen.
Ich versteh absolut nicht wo dein problem ist, mal davon abgesehen davon das dir anscheinend so ziemlich alle Grundlagen und jegliche eigeninitiative fehlen. |
Das würde ich nicht sagen. Ich suche und versuche es selber zu lösen. Es klappt halt nicht. Habe das ja jetzt so zusammen gebaut!
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:
| for (int i = 0; i < fd.Count; i++) { string pattern = @"((?i)(VEREIN)|(PLATZ)|(SPIEL)|(\s))* (?<1>.*?) .*"; Match match3 = Regex.Match(fd[i].Value, pattern);
Regex ZLiga = new Regex("(?i)(2.Liga).*?\\.\\s", RegexOptions.Singleline); MatchCollection bf = ZLiga.Matches(inhalt);
for (int j = 0; j < bf.Count; j++) { string pattern3 = @"((?i)(2.Liga)|(\s))*(?<1>.*?) .*"; Match match4 = Regex.Match(bf[i].Value, pattern3);
if (match4.Success) { string tabellenname1 = match4.Groups[1].Value;
if (!tablesbuffer.Contains(tabellenname1)) { tablesbuffer.Add(tabellenname1); } } }
if (match3.Success) { string tabellenname = match3.Groups[1].Value;
if (!tables.Contains(tabellenname)) { tables.Add(tabellenname); } } } |
Am ende bei match3.Succes usw... will ich unter
if (!tables.Contains(tabellenname) && XXXXXXX) noch prüfen, das die Tabellen nicht vorkommen sollen.
Hab sie ja jetzt in einer Liste. Nur wie hol ich mir die Liste. !tablesbuffer alleine wirft eine Fehlermeldung aus!
bakachan - Di 24.11.09 14:39
und auch da hast du die antwort schon direkt vor deinen augen
C#-Quelltext
1:
| !tables.Contains(tabellenname) |
jetzt willst du ja nicht nur überprüfen ob der name in der einen liste (tables) vorkommt sondern auch ob er in der anderen(tablesbuffer) vorkommt, es is genau das gleiche nochmal wieder ist die antwort .Contains
und noch ein Tipp am Rande:
deine Liste der verbotenen namen wird sich ja nicht bei jedem schleifendurchlauf(fd) ändern also erstelle die Liste bitte außerhalb der Schleife(fd) sonst machst du jedes mal das gleiche wieder mit.
als zielstellung quasi:
1 mal am Anfang die Liste der verbotenen Namen erstellen
Dann in die Schleife von fd und da nur anhand der liste überprüfen.
M-Cha - Di 24.11.09 14:48
Das war ganz Simpel!
ICH habe einen Denkfehler gehabt!
C#-Quelltext
1: 2: 3: 4:
| if (!tables.Contains(tabellenname) && !tablesbuffer.Contains(tabellenname)) { tables.Add(tabellenname); } |
Ich muss ja tablesbuffer.contains mit der aktuellen variable vergleichen und ich habe mich die ganze Zeit gefragt voher ich diese variable bekomme!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!