2010-11-26 5 views
26

私はランダムな単語、文章、単語/段落の数、住所、番号、郵便番号/郵便番号、国、電話番号、電子メールアドレスなどの特定の構文によって与えられる段落を生成することができるC#ジェネレータを探しています。C#のlorem ipsumジェネレータはありますか?

const string LoremIpsum = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; 

それを繰り返すために:

String.Join(Environment.NewLine, 
      Array.ConvertAll(new int[count], i => LoremIpsum)); 

または、.NET 4.0で:

String.Join(Environment.NewLine, Enumerable.Repeat(LoremIpsum, count)); 
+5

Googleをお試しいただきましたか? http://www.google.nl/search?q=lorem+ipsum+c%23 - 最初のヒットが役立ちます。 – Marijn

+22

私はそれをgoogledし、最初の結果は私をここにもたらした:)。 – RayLoveless

答えて

23

。あなたはそれがかなりかかわらず、最小限のです

Install-Package netfx-IpsumGenerator 

でそれをインストールすることができ

、私は現在、より良い1、または貢献する方法を探しています。

+0

素敵な答え:)) –

48
static string LoremIpsum(int minWords, int maxWords, 
    int minSentences, int maxSentences, 
    int numParagraphs) { 

    var words = new[]{"lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", 
     "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod", 
     "tincidunt", "ut", "laoreet", "dolore", "magna", "aliquam", "erat"}; 

    var rand = new Random(); 
    int numSentences = rand.Next(maxSentences - minSentences) 
     + minSentences + 1; 
    int numWords = rand.Next(maxWords - minWords) + minWords + 1; 

    StringBuilder result = new StringBuilder(); 

    for(int p = 0; p < numParagraphs; p++) { 
     result.Append("<p>"); 
     for(int s = 0; s < numSentences; s++) { 
      for(int w = 0; w < numWords; w++) { 
       if (w > 0) { result.Append(" "); } 
       result.Append(words[rand.Next(words.Length)]); 
      } 
      result.Append(". "); 
     } 
     result.Append("</p>"); 
    } 

    return result.ToString(); 
} 
+2

これは、数多くのストリングコンカチスの代わりに、StringBuilderを使用するのに適しています。 – JimmyBoh

+1

@JimmyBohユーザーStringBuilderに更新されました。大量のテキストで永遠を取っていた。 –

+0

ありがとうございます – Greg

24

偽のデータを簡単に生成するために使用できるRuby Faker gemのC#ポート(名前、アドレス、電話番号、lorem ipsumテキスト)を書きました。

Gitubのソースを持つNuGetパッケージ(Install-Package Faker.Net)として入手できます。また、サンプルコードとともにその機能の一部を紹介する記事を投稿しました。 (githubの上の)

+0

これは素晴らしいです。まさに私が探していたもの。ありがとう! – JoshSchlesinger

+0

これは素晴らしいです!ちょうど私が必要なもの。素晴らしい仕事ベン – ncbl

+0

非常に良い - ありがとう – Rodney

1

なぜLoremのイプサムオンライン・ジェネレータを使用しませんか?

私は、HTMLページからLoremののispum文字列を抽出し、このコードを書いた:

string LoremIpsum() 
{ 
    string HTML = null; 
    WebRequest request = WebRequest.Create("http://lipsum.com/feed/html"); 
    request.Credentials = CredentialCache.DefaultCredentials; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    Stream dataStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(dataStream); 
    HTML = reader.ReadToEnd(); //se citeste codul HTMl 

    //searching for Lorem Ipsum 
    HTML = HTML.Remove(0, HTML.IndexOf("<div id=\"lipsum\">")); 
    HTML = HTML.Remove(HTML.IndexOf("</div>")); 
    HTML = HTML 
     .Replace("<div id=\"lipsum\">", "") 
     .Replace("</div>", "") 
     .Replace("<p>", "") 
     .Replace("</p>", ""); 

    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 
    return HTML; 
} 
+1

なぜこの単純なalgoの外部サービス(これは遅かれ早かれになる可能性があります)に頼っているのですか? –

5

あなたのためにこの正確なことを行いNugetのパッケージアウトが実際にあります。

http://www.nuget.org/packages/NLipsum/

はたとえば、あなただけのこれを行うことにより、テキストの段落を生成することができます。

var someComments = new NLipsum.Core.Paragraph(); 
2

こんにちは
あなたがnugetパッケージをMMLib.RapidPrototypingからWordGeneratorまたはLoremIpsumGeneratorを使用することができます。

using MMLib.RapidPrototyping.Generators; 
public void Example() 
{ 
    WordGenerator generator = new WordGenerator(); 
    var randomWord = generator.Next(); 

    Console.WriteLine(randomWord); 

    LoremIpsumGenerator loremIpsumGenerator = new LoremIpsumGenerator(); 
    var text = loremIpsumGenerator.Next(3,3); 

    Console.WriteLine(text); 
} 

Nuget site
Codeplex project site

2

のStringBuilderを使用してバージョンとHTMLタグなし(改行の代わりに、段落記号を使用して):

private static string LoremIpsum(int minWords, int maxWords, int minSentences, int maxSentences, int numLines) 
    { 
     var words = new[]{"lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod", "tincidunt", "ut", "laoreet", "dolore", "magna", "aliquam", "erat"}; 

     var rand = new Random(); 
     int numSentences = rand.Next(maxSentences - minSentences) 
      + minSentences + 1; 
     int numWords = rand.Next(maxWords - minWords) + minWords + 1; 

     var sb = new StringBuilder(); 
     for (int p = 0; p < numLines; p++) 
     { 
      for (int s = 0; s < numSentences; s++) 
      { 
       for (int w = 0; w < numWords; w++) 
       { 
        if (w > 0) { sb.Append(" "); } 
        sb.Append(words[rand.Next(words.Length)]); 
       } 
       sb.Append(". "); 
      } 
      sb.AppendLine(); 
     } 
     return sb.ToString(); 
    } 
2

マイナー修正グレッグ+富野の優れた方法に各文章の最初の単語を大文字にします。私はまた末尾の改行を削除し、あまりにも多くを与えたいくつかの "+ 1"を削除しました。ユーザーインターフェイスのワードラップ機能をテストするのに非常に便利です! Tomino & Gregに感謝します。

private static string LoremIpsum(int minWords, int maxWords, int minSentences, int maxSentences, int numLines) 
{ 
    var words = new[]{"lorem", "ipsum", "dolor", "sit", "amet", "consectetuer", "adipiscing", "elit", "sed", "diam", "nonummy", "nibh", "euismod", "tincidunt", "ut", "laoreet", "dolore", "magna", "aliquam", "erat"}; 

    var rand = new Random(); 
    int numSentences = rand.Next(maxSentences - minSentences) 
     + minSentences; 
    int numWords = rand.Next(maxWords - minWords) + minWords; 

    var sb = new StringBuilder(); 
    for (int p = 0; p < numLines; p++) 
    { 
     for (int s = 0; s < numSentences; s++) 
     { 
      for(int w = 0; w < numWords; w++) 
      { 
       if(w > 0) { sb.Append(" "); } 
       string word = words[ rand.Next(words.Length) ]; 
       if(w == 0) { word = word.Substring(0, 1).Trim().ToUpper() + word.Substring(1); } 
       sb.Append(word); 
      } 
      sb.Append(". "); 
     } 
     if (p < numLines-1) sb.AppendLine(); 
    } 
    return sb.ToString(); 
}