1
Answer

Creating Large Text File Very Slow...

Chad Mancl

Chad Mancl

16y
6.7k
1

I have a application that reads in text files, pulls info out and create one or many new text files based on infomation in the original file.  I have done this with VB6 and it flys...now c# appears to be very slow at doing this...

I often deal with fairly large files, I noticed my problem when I came accross a 7+ gig file that after an hour was not done, but it was still processing (this same file was done in VB6 in about a minute or less). Here I am placing the lines I want to write out to a text file in a new string and print the file when completed.  I have tried writing the text file line by line, printing into a stringwriter and than print my text file...and this way...Here is a chunk of the code that is being used for this...

public static string ProcessFile(string sFilePath, string sDataDirectory)

{

string sLine;

//This seems to go very fast....

StreamReader sr = new StreamReader(sFilePath);

sLine = sr.ReadToEnd();

sr.Close();

//I do Some Other Functions Here...Determine The File Type And What I Want To Do With It...

//Call Next Function...

sReturn = GeneralFunctions.Process835(sLine, sFilePath, sDataDirectory);

}

public static string Process835(string sFileString, string sFilePath, string sDataDirectory)

{

//Divide By ISA Segments...

//Check If ANSI File...

if (sFileString.Substring(0, 3) == "ISA")

{

string sBodyStream = "";

string sISAStream = "";

string sIEAStream = "";

string sFileName = "";

string sReturnMsg = "";

string sPayorID = "";

string sClaimType = "";

string sLine = "";

string[] aRetSeg;

bool bEOF = false;

bool bReject = false;

long lCtr = 0;

try

{

string sSubEleSep = Convert.ToString(sFileString.Substring(104, 1));

string sEleSep = Convert.ToString(sFileString.Substring(3, 1));

string sTerm = Convert.ToString(sFileString.Substring(105, 1));

long lCurChar = 0;

while (!bEOF)

{

aRetSeg = GeneralFunctions.GetNextLine(sFileString, ref lCurChar, sSubEleSep, sEleSep, sTerm, ref bEOF, ref sLine);

lCtr = 0;

switch (aRetSeg[0])

{

case "ISA":

sISAStream = "";

//Create IEA Segment...We Need It Ahead Of Time And We Need ISA 13

sIEAStream = "IEA" + sEleSep + "1" + sEleSep + aRetSeg[13] + sTerm;

sISAStream = sLine;

break;

case "IEA":

sReturnMsg = sReturnMsg + Program.CreateNewFile(sFileName, "835", sISAStream + sBodyStream + sIEAStream, ref bReject, sDataDirectory, sPayorID, sClaimType) + " \r\n";

break;

case "":

bEOF = true;

break;

default:

if (aRetSeg[lCtr] == "GS")

{

sFileName = aRetSeg[2];

sBodyStream = "";

}

sBodyStream = sBodyStream + sLine;

break;

}

}

return sReturnMsg;

}

catch (Exception e)

{

return "835 File Exception: " + e.Message + "\r\n";

}

}

else

{

return "File Appears To Not Be An ANSI File.(Process835)..\r\n";

}

}

public static string[] GetNextLine(string sFileString, ref long lCurChar, string sSegSubEleSep, string sSegEleSep, string sSegTerm, ref Boolean bEOF, ref string sLine)

{

long i = 0;

long lHoldCurChar = lCurChar;

string sTempLine = "";

System.Text.Encoding enc = System.Text.Encoding.ASCII;

byte[] myByteArray = enc.GetBytes(sFileString);

for (i = lHoldCurChar; i <= Convert.ToDouble(sFileString.Length); i++)

{

char cChar = Convert.ToChar(myByteArray[i]);

if (cChar == Convert.ToChar(sSegTerm))

{

break;

}

else

{

if (Convert.ToInt64(cChar) != 13 & Convert.ToInt64(cChar) != 10 & Convert.ToInt64(cChar) != 12)

{

sTempLine = sTempLine + Convert.ToString(cChar);

}

}

}

sTempLine = sTempLine + sSegTerm;

sLine = sTempLine;

lCurChar = i + 1;

int k = 0;

int j = 0;

string sCurEle = "";

string[] aRetAry = new string[30];

while (j < Convert.ToInt64(sLine.Length))

{

if (sLine.Substring(j, 1) == sSegEleSep | sLine.Substring(j, 1) == Convert.ToString(sSegTerm))

{

aRetAry[k] = sCurEle;

sCurEle = "";

k++;

}

else

{

if (sLine.Substring(j, 1) != Convert.ToString(sSegTerm))

{

sCurEle = sCurEle + sLine.Substring(j, 1);

}

}

j++;

}

if (lCurChar + 5 >= sFileString.Length)

{

bEOF = true;

}

return aRetAry;

}

//This Function Actually Creates The File...

public static string CreateNewFile(string sTransID, string sFileType, string sFileStream, ref bool bError, string sDataDirectory, string sPayorID, string sClaimType)

{

string sPayorDir = sDataDirectory + @"ClaimsTransmissions\";

if (sClaimType != "")

{

sPayorDir = sPayorDir + sClaimType + @"\" + sPayorID + @"\";

}

else

{

sPayorDir = sPayorDir + @"_Files\";

}

if (sFileType == "835")

{

sPayorDir = sPayorDir + @"835\Working\";

}

try

{

try

{

if (!Directory.Exists(sPayorDir))

{

Directory.CreateDirectory(sPayorDir);

}

}

catch

{

bError = true;

return "Error Occured Checking If Folder Path Exists And Create Path If Not...: '" + sDataDirectory + @"ClaimsTransmissions\_Files\" + sFileType + @"\";

}

try

{

//Write File...

StreamWriter writer = File.CreateText(sPayorDir + sTransID + "." + sFileType);

writer.Write(sFileStream);

writer.Close();

bError = false;

return "File Created: '" + sPayorDir + sTransID + "." + sFileType + "'";

}

catch (Exception ex)

{

bError = true;

return "Error Occured Writing New File...: '" + sPayorDir + sTransID + "." + sFileType + "' \r\n" + "Exception Message: '" + ex.Message + "'";

}

}

catch (Exception e)

{

bError = true;

return "Error Occured...Unkown Problem...Exception Message: \r\n" + e.Message;

}

}

 

Thanks for all your help in advance..

Chad

Answers (1)