Find the maximum number of 100 files in GB

Source: Internet
Author: User

Some time ago, I saw "The maximum number of 100 files in GB ". So I wrote this article.

 

Author: Li chengxiang

 

Requirement: a gb file contains all numbers, and each number is separated by a comma. Find the maximum number of 100 numbers.

Source sticker http://topic.csdn.net/u/20091013/10/d5d371dc-6dec-4034-bf31-432a47ffce96.html

 

Note: The method is important, so GB of data is not used for testing.

 

Purpose: To write the code. The test was conducted with data smaller than 1g, 1g, 1.5g, 2g, and 2G, G, and found that the speed was too slow. This post is specially sent for better code. Please do not talk on paper. Everything speaks with data.

 

Code:Static void main (string [] ARGs) <br/>{< br/> string Path = "data.txt "; <br/> // generate a 100000000 GB file <br/> // write (path ); <br/> // calculate the program running time <br/> stopwatch stop = new stopwatch (); <br/> stop. start (); <br/> string [] maxdata = new string [100]; // initialize the 100 largest number of containers <br/> for (INT I = 0; I <100; I ++) <br/> maxdata [I] = "0"; <br/> int nbytes = 1024*1024*512; // read GB Data each time for processing <br/> byte [] DATA = new byte [Nb Ytes]; <br/> fileinfo Fi = new fileinfo (PATH); <br/> filestream FS = Fi. openread (); <br/> int L = FS. read (data, 0, nbytes); <br/> string strdata = ""; <br/> while (L> 0) <br/> {<br/> for (INT I = 0; I <L; I ++) <br/>{< br/> If (data [I] = 44) // Encounters "," separator <br/>{< br/> If (strdata! = "") <Br/> compare (strdata, ref maxdata); <br/> strdata = ""; <br/>}< br/> else <br/> strdata + = stringdata (data [I]); <br/>}< br/> L = FS. read (data, 0, nbytes); <br/>}< br/> stop. stop (); <br/> console. writeline (STOP. elapsedmilliseconds. tostring (); <br/> console. read (); <br/> // Save the result <br/> foreach (string STR in maxdata) <br/> writelinetext ("result.txt", STR ); <br/>}< br/> /// <summary> <br/> // convert to a number <br/> /// </Summary> <br/>/ // <Param name = "data"> each binary number </param> <br/> // <returns> returns the 10 hexadecimal number </returns> <br/> static string stringdata (INT data) <br/>{< br/> int strdata = data-48; <br/> return strdata. tostring (); <br/>}< br/> /// <summary> <br/> // compare it with the minimum number of the maximum 100 numbers <br/> // </Summary> <br/> /// <Param name = "data"> Number of new reads </param> <br/> /// <Param name = "maxdata"> up to 100 </param> <br/> static void compare (string data, ref string [] maxdata) <br/>{< br/> If (data. length <maxdata [99]. length) return; <br/> else if (data. length> maxdata [99]. length) {maxdata [99] = data; sortdata (ref maxdata) ;}< br/> else <br/>{< br/> for (INT I = 0; I <data. length; I ++) <br/>{< br/> If (Int. parse (data [I]. tostring ()> Int. parse (maxdata [99] [I]. tostring () {maxdata [99] = data; sortdata (ref maxdata); break ;}< br/> else if (Int. parse (data [I]. tostring () <Int. parse (maxdata [99] [I]. tostring () break; <br/>}< br/> // <summary> <br/> // sort <br/> /// </Summary> <br/> /// <Param name = "maxdata"> the maximum number of records saved is 100. </param> <br/> static void sortdata (ref string [] maxdata) <br/> {<br/> int maxid = 99; // records the location of the minimum number greater than maxdata [99] <br/> for (INT I = 98; i>-1; I --) <br/>{< br/> If (maxdata [I]. length> maxdata [99]. length) {maxid = I + 1; break ;}< br/> else if (maxdata [I]. length = maxdata [99]. length) <br/> {<br/> bool ismax = true; // maxdata [99] Small <br/> for (Int J = 0; j <maxdata [99]. length; j ++) <br/>{< br/> If (Int. parse (maxdata [I] [J]. tostring ()> Int. parse (maxdata [99] [J]. tostring () {ismax = true; break ;}< br/> else if (Int. parse (maxdata [I] [J]. tostring () <Int. parse (maxdata [99] [J]. tostring () {ismax = false; break ;}< br/>}< br/> If (ismax) <br/>{< br/> maxid = I + 1; <br/> break; <br/>}< br/> maxid = I; <br/>}< br/> string data = maxdata [99]; <br/> for (INT I = 99; I> maxid; I --) <br/>{< br/> maxdata [I] = maxdata [I-1]; <br/>}< br/> maxdata [maxid] = data; <br/>}< br/> /// <summary> <br/> // write data (each number is randomly generated and the length is (1-100) <br/> /// </Summary> <br/> // <Param name = "path"> Data Writing path </param> <br/> // /<Param name = "N"> Number of writes </param> <br/> static void write (string path, int N) <br/>{< br/> writetext (path, "0"); </P> <p> random rlength = new random (); <br/> random RDATA = new random (); // <br/> for (INT I = 0; I <n; I ++) // generate n random numbers <br/>{< br/> int length = rlength. next (1,100); // generate a single-digit (1-100) number <br/> string strdata = ","; <br/> for (Int J = 0; j <length; j ++) <br/>{< br/> If (j = 0 & length> 1) strdata + = RDATA. next (1, 9 ). tostring (); // if the number of digits is greater than 1, the first digit cannot be zero <br/> else <br/> strdata + = RDATA. next (0, 9 ). tostring (); <br/>}< br/> writetext (path, strdata ); <br/>}< br/> static void writetext (string path, string text) <br/>{< br/> using (streamwriter write = new streamwriter (path, true, encoding. default) <br/>{< br/> write. write (text ); <br/>}< br/> /// <summary> <br/> // save up to 100 data records <br/> // </Summary> <br/> /// <Param name = "path"> saved path </param> <br/> /// <Param name = "text"> number </param> <br/> static void writelinetext (string path, string data) <br/>{< br/> using (streamwriter write = new streamwriter (path, true, encoding. default) <br/>{< br/> write. writeline (data); <br/>}< br/>}
 

 

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.