2010-10-31 19 views
0

J'ai un tableau {{".txt | .doc | .docx", "100000"}, {".xls | .xlsx | .xxx "," 10000 "}," .npp "," 100000 "}Comment exécuter un tableau dont le premier membre du tableau est une chaîne qui doit être divisée

J'essaie de trouver un moyen d'exécuter une boucle foreach sur chaque membre de la matrice dans une boucle tout en vérifiant la premier membre sous la forme d'une chaîne et non d'un tableau.

Le code recherchera tous les documents supérieurs à 10000 octets, tant que les documents sont txt, doc, docx, etc., puis recherchera tous les fichiers xls, puis npp. Certains des membres de la première partie du tableau ont plusieurs types, certains juste un. Y a-t-il un moyen efficace de le faire?

J'ai essayé:! si (taille == (taille [2, i]) & & ((ext = sextension [1, 0] .ToUpper())) & & ((ext = sextension [1 , x] .ToUpper())))

mais évidemment cela ne fonctionne pas. Désolé si ce n'est pas clair, mais je ne suis pas sûr de savoir comment l'expliquer autrement.

+0

afficher code plus - ce langage de programmation est-il réellement? Ressemble à PHP? Essayez d'utiliser le bouton de code pour le code (le bouton 01101). –

+0

JavaScript? Ne pas effacer la langue. – Hogan

+0

C# chaîne [,] extension = nouvelle chaîne [5,2] {{".doc | .docx | .doc1", "1000"}, {".xls", "1000"}, {".pdf" , "1000"}, {".zip", "10000"}, {".7z | .pz", "100000"}}; foreach (string p dans la matrice) \t \t \t \t \t \t { \t \t \t \t \t \t \t \t si (p == extension [0, 1]()) || ..ext2 = taille ou ..ext3 && (taille) \t \t \t \t \t \t \t \t { \t \t \t \t \t \t \t \t \t Console.WriteLine ("Ext {0} a une taille de fichier égale à {1}", size_entention, size); – jjj

Répondre

0

ici est le code que vous mettez dans le commentaire ci-dessus:

c# string[,] extension = new string[5,2]{ 
    {".doc|.docx|.doc1","1000"} , 
    {".xls", "1000"} , 
    {".pdf","1000"}, 
    {".zip", "10000"}, 
    {".7z|.pz", "100000"} }; 

foreach (string p in array) 
{ 
    if (p == extension[0, 1]()) || ..ext2 = size or ..ext3 && (size) 
    { 
    Console.WriteLine("Ext {0} has a file size equal to {1}", size_entention, size); 

ne fait pas beaucoup de sens, mais je vais y aller (deviner tout le chemin):

Le meilleur façon de faire la correspondance d'extension étant donné que votre structure de données est d'utiliser regEx.Match(), mais cela peut être lent. (Rappelez-vous si votre chaîne de recherche est .docx vous devez faire @"\.docx" avant d'appeler regEx.match() -. . est réservé dans regex

Je ne suggère pas, il est lent Qu'est-ce que vous voulez vraiment est un dictionnaire ici.. est un exemple d'utilisation dictionnaire:..

Dictionary<string, int> d = new Dictionary<string, int>(); 
d.Add(".doc", 1000); 
d.Add(".docx", 1000); 
d.Add(".doc1", 1000); 
d.Add(".xls", 1000); 
d.Add(".pdf", 1000); 
d.Add(".zip", 10000); 
d.Add(".7z", 100000); 
d.Add(".pz", 100000); 

foreach (string p in array) 
{ 
    if (d.ContainsKey(p) 
    Console.WriteLine("Ext {0} has a file size equal to {1}",p, d[p]); 
} 

Ce sera beaucoup plus rapide sur la recherche que ce que vous faisiez Configuration du dictionnaire est lent, je suggère la mise en cache, il

+0

Je m'excuse si je ne vois pas clairement. Le code que je possède ne fonctionne pas, c'est pourquoi cela n'a pas de sens. J'essaye de rechercher un système de fichiers pour tous les fichiers avec une extension, mais pour le même type de fichiers (doc, docx, etc.) je veux comparer seulement une fois. Le problème que je rencontre est quand je recherche des types de tableau array [0,0] avec la taille array [0,1] (dans une boucle) Je veux que l'instruction if compare le tableau [0,0] (tous après les séparer). Donc si le fichier .docx || .doc || .rdoc == filesize puis console.writeline. – jjj

+0

utiliser regex alors, comme je l'ai dit - c'est un choix pire pour tout ce que vous faites (ce qui n'est toujours pas clair). – Hogan

+0

notez ceci: l'exemple de code ci-dessus fera exactement ce que votre exemple essayait de faire - essayez-le dans votre code et voyez si c'est vraiment ce que vous voulez. – Hogan