NecroNeo
Legacy Member
Ik heb een tekstbestand waarvan elke regel er zo uitziet
NAAM1 NAAM2 float (gescheiden door tabs)
Ik heb een manier om dit in te laden naar een hashtable in een hashtable. En dit werkt perfect met een kleine versie van het bestand 3 megabyte.
Probleem is dat ik graag het volledige bestand 500Mb zou willen inladen en dat geeft problemen.
Ziet iemand hier een oplossing voor? Mijn gedacht is momenteel het bestand in stukken inladen. Maar dit is niet altijd een geschikte oplossing (stel dat ik maar 1 gegeven nodig heb, dan moet ik het volledige bestand inladen).
NAAM1 NAAM2 float (gescheiden door tabs)
Ik heb een manier om dit in te laden naar een hashtable in een hashtable. En dit werkt perfect met een kleine versie van het bestand 3 megabyte.
Probleem is dat ik graag het volledige bestand 500Mb zou willen inladen en dat geeft problemen.
Ziet iemand hier een oplossing voor? Mijn gedacht is momenteel het bestand in stukken inladen. Maar dit is niet altijd een geschikte oplossing (stel dat ik maar 1 gegeven nodig heb, dan moet ik het volledige bestand inladen).
Code:
using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Globalization;
namespace Expression
{
public class ExpressionData
{
private Hashtable Data;
public ExpressionData()
{
Data = new Hashtable();
}
private void Add(string Accession1, string Accession2, float ExpressionLevel)
{
if (!Data.ContainsKey(Accession1.ToLower()))
{
Data.Add(Accession1.ToLower(), new Hashtable());
((Hashtable)Data[Accession1.ToLower()]).Add(Accession2.ToLower(), ExpressionLevel);
}
else
{
((Hashtable)Data[Accession1.ToLower()]).Add(Accession2.ToLower(), ExpressionLevel);
}
}
public void Load(string filename)
{
CultureInfo culture = new CultureInfo("en-US");
TextReader tr = new StreamReader(filename);
string S;
while ((S = tr.ReadLine()) != null)
{
string[] parts = S.Split('\t', '\n');
Add(parts[0].ToLower(), parts[1].ToLower(), float.Parse(parts[2],culture));
Add(parts[1].ToLower(), parts[0].ToLower(), float.Parse(parts[2], culture));
}
tr.Close();
}
public float GetValue(string Accession1, string Accession2)
{
if (Data.ContainsKey(Accession1.ToLower()))
{
Hashtable temp = ((Hashtable)Data[Accession1.ToLower()]);
if (temp.ContainsKey(Accession2.ToLower()))
{
return ((float)temp[Accession2.ToLower()]);
}
else return (float)0;
}
else return (float)0;
}
}
}
