Autor Beitrag
M-Cha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 24.11.09 10:27 
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.


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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!

ausblenden 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;

                   // Überprüfuntempg auf doppelte Tabellennamen
                   if (!tablestemp.Contains(tabellenname))
                   {
                            tables.Add(tabellenname);
                   }
               }


Tabellen die nicht ausgegeben werden sollen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 24.11.09 12:07 
user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:

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)
ausblenden Quelltext
1:
2:
if(!doppelt && !verboten)
...
M-Cha Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 24.11.09 13:40 
Also mir fehlt jetzt nur der Umsetzungsgedanke.

Ich habe meine Anwendung hier:

ausblenden 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;

                   // Überprüfuntempg auf doppelte Tabellennamen
          if (!tables.Contains(tabellenname))
                    {
                        tables.Add(tabellenname);
                    }
               }
           }


und hier jetzt den Regex mit den Tabellen die nicht angezeigt werden dürfen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 24.11.09 13:53 
user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
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)
ausblenden Quelltext
1:
2:
if(!doppelt && !verboten)
...
M-Cha Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 24.11.09 14:10 
user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 24.11.09 14:27 
user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
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.



user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
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!
ausblenden volle Höhe 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;

                         // Überprüfung auf doppelte Tabellennamen
                        if (!tablesbuffer.Contains(tabellenname1))
                         {
                               tablesbuffer.Add(tabellenname1);
                         }
                    }
               }

               if (match3.Success)
               {
                   string tabellenname = match3.Groups[1].Value;

                   // Überprüfuntempg auf doppelte Tabellennamen
                        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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Di 24.11.09 14:39 
und auch da hast du die antwort schon direkt vor deinen augen
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 24.11.09 14:48 
Das war ganz Simpel!

ICH habe einen Denkfehler gehabt!

ausblenden 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!