From b6d36d7bf540520c8463f5a25685d7c9ea55fee7 Mon Sep 17 00:00:00 2001 From: Damian Wessels Date: Wed, 6 Sep 2023 15:19:11 +0200 Subject: [PATCH] Cardmarket artikelparser umgeschrieben --- CardMarketBot/Helper.cs | 72 ++++++++++++++++++++++++------- CardMarketBotTests/HelperTests.cs | 6 ++- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/CardMarketBot/Helper.cs b/CardMarketBot/Helper.cs index e383789..ae213a6 100644 --- a/CardMarketBot/Helper.cs +++ b/CardMarketBot/Helper.cs @@ -58,23 +58,65 @@ public static class Helper List result = new List(); string[] datas = text.Split("\r\n"); - - int anzahl = datas.Length / 6; - - for (int i = 0; i < datas.Length; i += 6) + for(int i = 0; i < datas.Length; i++) { Artikel temp = new Artikel(); - var xFound = datas[i].IndexOf("x"); - if (xFound == -1) continue; - var am = datas[i].Substring(0, xFound); - temp.Amount = Convert.ToInt32(am); - temp.GERName = datas[i].Substring(xFound + 1); - temp.ENGName = datas[i + 1]; - temp.CardNumber = datas[i + 2]; - temp.Source = datas[i + 3]; - temp.Raritaet = datas[i + 4]; - temp.Preis = datas[i + 5].Split(' ')[0]; - result.Add(temp); + int internalCounter = 0; + bool SourceFounded = false; + for(int j = i; j < datas.Length; j++) + { + Trace.WriteLine(internalCounter); + var nFound = datas[j].IndexOf("€"); + + if(nFound == -1) + { + + var xFound = datas[j].IndexOf("x"); + if(xFound >= 1 && xFound <= 2) + { + temp.Amount = Convert.ToInt32(datas[j].Substring(0, xFound)); + temp.GERName = datas[j].Substring(xFound + 1).Trim(); + } + if(internalCounter == 1) + { + temp.ENGName = datas[j]; + } + if(internalCounter == 2) + { + var d = datas[j].IndexOf("#"); + if (datas[j].IndexOf("#") > -1) + { + temp.CardNumber = datas[j]; + SourceFounded = false; + } + else + { + temp.Source = datas[j]; + SourceFounded = true; + } + } + if(internalCounter == 3) + { + if(SourceFounded) + { + temp.Raritaet = datas[j]; + } + else + { + temp.Source = datas[j]; + } + } + Trace.WriteLine(j + " " + datas[j]); + } + else + { + temp.Preis = datas[j].Split(' ')[0]; + result.Add(temp); + i = j; + break; + } + internalCounter++; + } } return result; } diff --git a/CardMarketBotTests/HelperTests.cs b/CardMarketBotTests/HelperTests.cs index 21c46fc..4eb0471 100644 --- a/CardMarketBotTests/HelperTests.cs +++ b/CardMarketBotTests/HelperTests.cs @@ -1,6 +1,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -15,13 +16,16 @@ namespace Tests { string input = "1x Portgas.D.Ace (OP02-013) (V.3)\r\nPortgas.D.Ace (OP02-013) (V.3)\r\n#013\r\nOP-02\r\nNM\r\nTOP Condition, Bilder auf Anfrage! Versand im Magnetic Card Holder + Bonus\r\n515,00 €\r\n"; string input2 = "1x Schrottgolem\r\nScrap Golem\r\n#059\r\nMGED\r\nNM\r\n0,10 €\r\n1x Schalenritter\r\nShell Knight\r\n#016\r\nGFP2\r\nNM\r\n0,10 €\r\n2x Chaos-Grepher\r\nChaos Grepher\r\n#039\r\nGFP2\r\nNM\r\n0,10 €\r\n1x Jormungandr, Generaider-Boss der Ewigkeit\r\nJormungandr, Generaider Boss of Eternity\r\n#147\r\nGFP2\r\nNM\r\n0,10 €\r\n3x Querhüter\r\nCross Keeper\r\n#002\r\nPOTE\r\nNM\r\n0,05 €\r\n1x Grausiger Trick des Erzunterweltlers\r\nArchfiend's Ghastly Glitch\r\n#026\r\nTAMA\r\nNM\r\n0,10 €\r\n1x Der sagenhafte Abanc\r\nThe Fabled Abanc\r\n#010\r\nMP22\r\nNM\r\n0,05 €\r\n1x Sagenhafter Andwraith\r\nFabled Andwraith\r\n#024\r\nMP22\r\nNM\r\n0,05 €\r\n1x Treffpunkt der Sta-Brigade\r\nTri-Brigade Rendezvous\r\n#032\r\nMP22\r\nNM\r\n0,05 €\r\n1x Sagenhafter Verrat\r\nFabled Treason\r\n#041\r\nMP22\r\nNM\r\n0,05 €\r\n1x Zoroa, Magistus-Loderkatastrophe\r\nZoroa, the Magistus Conflagrant Calamity\r\n#212\r\nMP22\r\nNM\r\n0,05 €\r\n1x Schreckensklauen-Doppelsäge\r\nScareclaw Twinsaw\r\n#075\r\nDABL\r\nNM\r\n0,05 €\r\n1x Hajun, der geflügelte Mayakashi\r\nHajun, the Winged Mayakashi\r\n#017\r\nMAMA\r\nNM\r\n0,10 €\r\n1x Chaos-Daedalus\r\nChaos Daedalus\r\n#071\r\nBLCR\r\nNM\r\n0,10 €\r\n1x Flammedler Ritter - Roland\r\nInfernoble Knight - Roland\r\n#050\r\nAMDE\r\nNM\r\n0,05 €\r\n1x Chaos-Trugbild-Drache\r\nChaos Mirage Dragon\r\n#013\r\nPHHY\r\nNM\r\n0,20 €\r\n1x Abgrundschauspieler-Generalprobe\r\nAbyss Actors' Dress Rehearsal\r\n#063\r\nPHHY\r\nNM\r\n0,10 €\r\n1x Abgrundschauspieler - Freiheitsautorin\r\nAbyss Actor - Liberty Dramatist\r\n#016\r\nPHHY\r\nNM\r\n0,05 €\r\n1x Numeron-Schöpfung\r\nNumeron Creation\r\n#052\r\nPHHY\r\nNM\r\n0,05 €\r\n1x Abgrundskript - Dramatische Geschichte\r\nAbyss Script - Dramatic Story\r\n#064\r\nPHHY\r\nNM\r\n0,05 €\r\n1x Schwarzflügel - Elphin der Rabe\r\nBlackwing - Elphin the Raven\r\n#038\r\nMAZE\r\nNM\r\n0,10 €\r\n1x Rikka-Blütenblatt\r\nRikka Petal\r\n#047\r\nMAZE\r\nNM\r\n0,05 €\r\n1x D.D. Trainer\r\nD.D. Trainer\r\n#055\r\nDCR-25TH\r\nNM\r\n0,10 €\r\n1x Schwur des Erzunterweltlers\r\nArchfiend's Oath\r\n#092\r\nDCR-25TH\r\nNM\r\n0,10 €\r\n1x Frühe Saat\r\nPrimal Seed\r\n#042\r\nIOC-25TH\r\nNM\r\n0,10 €\r\n1x Neue Grenze\r\nNew Frontier\r\n#054\r\nCYAC\r\nNM\r\n0,05 €\r\n1x Lamia\r\nLamia\r\n#021\r\nBLMR\r\nNM\r\n0,10 €\r\n1x Groll der Viper\r\nViper's Grudge\r\n#022\r\nBLMR\r\nNM\r\n0,10 €\r\n2x Geist Lanzenträger, Speerkämpfer der Unterwelt\r\nGhost Lancer, the Underworld Spearman\r\n#023\r\nBLMR\r\nNM\r\n0,10 €\r\n1x Gazelle, König der mythischen Krallen\r\nGazelle the King of Mythical Claws\r\n#003\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Großflügliger Berfomet\r\nBig-Winged Berfomet\r\n#004\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Spiegel-Schwertritter\r\nMirror Swordknight\r\n#006\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Mächtiger Dinokönig Rex\r\nMighty Dino King Rex\r\n#008\r\nDUNE\r\nNM\r\n0,15 €\r\n1x Altergeist Peritrator\r\nAltergeist Peritrator\r\n#010\r\nDUNE\r\nNM\r\n0,25 €\r\n1x Flammedler Ritter Ricciardetto\r\nInfernoble Knight Ricciardetto\r\n#013\r\nDUNE\r\nNM\r\n0,25 €\r\n1x Flammedler Ritter Turpin\r\nInfernoble Knight Turpin\r\n#014\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Ultimativer glänzender Ritter Ursatron Alpha\r\nUltimate Bright Knight Ursatron Alpha\r\n#021\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Thestalos der Schattenfeuer-Monarch\r\nThestalos the Shadowfire Monarch\r\n#023\r\nDUNE\r\nNM\r\n0,15 €\r\n1x Schimäre das Illusionsungeheuer\r\nChimera the Illusion Beast\r\n#034\r\nDUNE\r\nNM\r\n0,25 €\r\n1x Thelematech Clatis\r\nThelematech Clatis\r\n#045\r\nDUNE\r\nNM\r\n0,15 €\r\n1x Schimärenfusion\r\nChimera Fusion\r\n#052\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Verbannende Fallgrube\r\nBanishing Trap Hole\r\n#077\r\nDUNE\r\nGD\r\n0,10 €\r\n3x Rotäugiger schwarzer Meteordrache\r\nRed-Eyes Black Meteor Dragon\r\n#095\r\nDUNE\r\nNM\r\n0,25 €\r\n1x Magier der Ergebenheit\r\nMagician of Faithfulness\r\n#098\r\nDUNE\r\nNM\r\n0,20 €\r\n1x Kornfeld-Coatl\r\nCornfield Coatl\r\n#005\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Zweiköpfiger Dinokönig Rex\r\nDouble-Headed Dino King Rex\r\n#007\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Behemoth, der König der Hundert Schlachten\r\nBehemoth the King of a Hundred Battles\r\n#024\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Gaia-Lohe, die Kraft der Sonne\r\nGaia Blaze, the Force of the Sun\r\n#042\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Grenosaurier Gigakanone\r\nGrenosaurus Giga-Cannon\r\n#046\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Jurassische Stärke\r\nJurassic Power\r\n#053\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Beta-Evolutionspille - Ultranszendenz\r\nBeta Evolution Pill - Ultranscendance\r\n#063\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Hundert Millionen Jahre Eisgefängnis\r\nMillion-Century Ice Prison\r\n#066\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Das fortwährende Epos von Charles\r\nThe Continuing Epic of Charles\r\n#072\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Kleiner Streit\r\nSmall Scuffle\r\n#078\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Geteilter Spiegel der Unterwelt\r\nSplit Mirror of the Underworld\r\n#079\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Zuttomozaurier\r\nZuttomozaurus\r\n#081\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Finis Terrae, Turm der Nekrowelt\r\nFinis Terrae, Tower of the Necroworld\r\n#082\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Kuibelt der Klingendrache\r\nKuibelt the Blade Dragon\r\n#083\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Sternenstaubgewürm\r\nStardust Wurm\r\n#094\r\nDUNE\r\nNM\r\n0,10 €\r\n1x Diabolica die Drachogeneralin\r\nDiabolica the Draconique General\r\n#096\r\nDUNE\r\nNM\r\n0,10 €\r\n"; + var d = Helper.ParseArtikeln(input); + + Debugger.Break(); Assert.Fail(); } [TestMethod()] public void ParseArtikelnTest1() { - string fehlerhaft = "4x DON!!\\r\\nDON!!\\r\\nOP-02\\r\\nNM\\r\\n1,99 €"; + string fehlerhaft = "4x DON!!\r\nDON!!\r\nOP-02\r\nNM\r\n1,99 €"; string funktioniert = "1x Gizmek Okami, der gefürchtete Sintflut-Drache\r\nGizmek Okami, the Dreaded Deluge Dragon\r\n#121\r\nMP21\r\nNM\r\n0,10 €\r\n3x Gizmek Inaba, der hoppelnde Hase von Hakuto\r\nGizmek Inaba, the Hopping Hare of Hakuto\r\n#130\r\nMP22\r\nNM\r\n0,05 €\r\n3x Gizmek Taniguku, der unbewegliche Intellekt\r\nGizmek Taniguku, the Immobile Intellect\r\n#132\r\nMP22\r\nNM\r\n0,05 €\r\n3x Gizmek Arakami, der Hagelbringer-Eber\r\nGizmek Arakami, the Hailbringer Hog\r\n#133\r\nMP22\r\nNM\r\n0,05 €\r\n3x Stonehenge\r\nStonehenge\r\n#024\r\nBLCR\r\nNM\r\n0,10 €\r\n3x Arahime die manifestierte Mikanko (V.1 - Ultra Rare)\r\nArahime the Manifested Mikanko (V.1 - Ultra Rare)\r\n#032\r\nDUNE\r\nNM\r\n0,30 €\r\n2x Mikanko-Geisterlauf\r\nMikanko Spiritwalk\r\n#076\r\nDUNE\r\nNM\r\n0,10 €"; Assert.Fail(); }