亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#從文件或標準輸入設備讀取指定行的方法

2020-01-24 01:58:36
字體:
來源:轉載
供稿:網友

本文實例講述了C#從文件或標準輸入設備讀取指定行的方法。分享給大家供大家參考。具體如下:

using System;using System.IO;using System.Runtime.InteropServices;using System.Text.RegularExpressions;using System.Collections.Generic;namespace RobvanderWoude{ class ReadLine {  static int Main( string[] args )  {   #region Command Line Parsing   string filename = string.Empty;   int linestart = 1;   int lineend = 2;   bool concat = false;   bool addspaces = false;   string concatchar = string.Empty;   bool skipempty = false;   bool trimlines = false;   bool numlines = false;   bool redirected;   bool set_c = false;   bool set_l = false;   bool set_s = false;   bool set_t = false;   bool set_input = false;   if ( ConsoleEx.InputRedirected )   {    set_input = true;    redirected = true;   }   else   {    if ( args.Length == 0 )    {     return WriteError( );    }    redirected = false;   }   foreach ( string arg in args )   {    if ( arg[0] == '/' )    {     try     {      switch ( arg.ToUpper( )[1] )      {       case '?':        return WriteError( );       case 'C':        if ( arg.ToUpper( ) != "/C" && arg.ToUpper( ) != "/CS" )        {         return WriteError( "Invalid command line switch " + arg );        }        concat = true;        if ( arg.ToUpper( ) == "/CS" )        {         addspaces = true;        }        if ( set_c )        {         return WriteError( "Duplicate command line argument /C*" );        }        set_c = true;        break;       case 'L':        if(arg.ToUpper( ).StartsWith( "/L:" ) && arg.Length > 3)        {         if ( arg[2] == ':' )         {          string linessel = arg.Substring( 3 );          string pattern = @"^(/-?/d+)$";          Match match = Regex.Match( linessel, pattern );          if ( match.Success )          {           linestart = Convert.ToInt32( match.Groups[1].Value );           lineend = linestart + 1;          }          else          {           pattern = @"^(/-?/d+)/./.(/-?/d+)$";           match = Regex.Match( linessel, pattern );           if ( match.Success )           {            linestart = Convert.ToInt32( match.Groups[1].Value );            lineend = Convert.ToInt32( match.Groups[2].Value ) + 1;           }           else           {            pattern = @"^(/-?/d+),(/-?/d+)$";            match = Regex.Match( linessel, pattern );            if ( match.Success )            {             // numlines is true if the second number              //specifies the number of lines instead of a line number             numlines = true;             linestart = Convert.ToInt32( match.Groups[1].Value );             lineend = Convert.ToInt32( match.Groups[2].Value );             if ( lineend < 1 )             {              return WriteError( "Invalid number of lines (" + lineend.ToString( ) + "), must be 1 or higher" );             }            }           }          }         }         else         {          return WriteError( "Invalid command line switch " + arg );         }        }        else        {         return WriteError( "Invalid command line switch " + arg );        }        if ( set_l )        {         return WriteError( "Duplicate command line argument /L" );        }        set_l = true;        break;       case 'S':        if ( arg.ToUpper( ) != "/SE" )        {         return WriteError( "Invalid command line switch " + arg );        }        skipempty = true;        if ( set_s )        {         return WriteError( "Duplicate command line argument /SE" );        }        set_s = true;        break;       case 'T':        if ( arg.ToUpper( ) != "/T" )        {         return WriteError( "Invalid command line switch " + arg );        }        trimlines = true;        if ( set_t )        {         return WriteError( "Duplicate command line argument /T" );        }        set_t = true;        break;       default:        return WriteError( "Invalid command line switch " + arg );      }     }     catch     {      return WriteError( "Invalid command line switch " + arg );     }    }    else    {     if ( set_input )     {      return WriteError( "Multiple inputs specified (file + redirection or multiple files)" );     }     if ( redirected )     {      return WriteError( "Do not specify a file name when using redirected input" );     }     else     {      filename = arg;     }    }   }   #endregion   try   {    int count = 0;    bool output = false;    string[] lines;    List<string> alllines = new List<string>( );    if ( redirected )    {     // Read standard input and store the lines in a list     int peek = 0;     do     {      alllines.Add( Console.In.ReadLine( ) );     } while ( peek != -1 );     // Convert the list to an array     lines = alllines.ToArray( );    }    else    {     // Read the file and store the lines in a list     lines = File.ReadAllLines( filename );    }    // Check if negative numbers were used, and if so,     //calculate the resulting line numbers    if ( linestart < 0 )    {     linestart += lines.Length + 1;    }    if ( lineend < 0 )    {     lineend += lines.Length + 1;    }    if ( numlines )    {     lineend += linestart;    }    // Iterate through the array of lines and display     //the ones matching the command line switches    foreach ( string line in lines )    {     string myline = line;     if ( trimlines )     {      myline = myline.Trim( );     }     bool skip = skipempty && ( myline.Trim( ) == string.Empty );     if ( !skip )     {      count += 1;      if ( count >= linestart && count < lineend )      {       if ( concat )       {        Console.Write( "{0}{1}", concatchar, myline );       }       else       {        Console.WriteLine( myline );       }       if ( addspaces )       {        concatchar = " ";       }      }     }    }   }   catch ( Exception e )   {    return WriteError( e.Message );   }   return 0;  }  #region Redirection Detection  public static class ConsoleEx  {   public static bool OutputRedirected   {    get    {     return FileType.Char != GetFileType( GetStdHandle( StdHandle.Stdout ) );    }   }   public static bool InputRedirected   {    get    {     return FileType.Char != GetFileType( GetStdHandle( StdHandle.Stdin ) );    }   }   public static bool ErrorRedirected   {    get    {     return FileType.Char != GetFileType( GetStdHandle( StdHandle.Stderr ) );    }   }   // P/Invoke:   private enum FileType { Unknown, Disk, Char, Pipe };   private enum StdHandle { Stdin = -10, Stdout = -11, Stderr = -12 };   [DllImport( "kernel32.dll" )]   private static extern FileType GetFileType( IntPtr hdl );   [DllImport( "kernel32.dll" )]   private static extern IntPtr GetStdHandle( StdHandle std );  }  #endregion  #region Error Handling  public static int WriteError( Exception e = null )  {   return WriteError( e == null ? null : e.Message );  }  public static int WriteError( string errorMessage )  {   if ( string.IsNullOrEmpty( errorMessage ) == false )   {    Console.Error.WriteLine( );    Console.ForegroundColor = ConsoleColor.Red;    Console.Error.Write( "ERROR: " );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.WriteLine( errorMessage );    Console.ResetColor( );   }   Console.Error.WriteLine( );   Console.Error.WriteLine( "ReadLine, Version 0.30 beta" );   Console.Error.WriteLine( "Return the specified line(s) from a file or Standard Input" );   Console.Error.WriteLine( );   Console.Error.Write( "Usage: " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.WriteLine( "READLINE filename [ options ]" );   Console.ResetColor( );   Console.Error.Write( " or: " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.WriteLine( "READLINE [ options ] < filename" );   Console.ResetColor( );   Console.Error.Write( " or: " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.WriteLine( "command | READLINE [ options ]" );   Console.ResetColor( );   Console.Error.WriteLine( );   Console.Error.Write( "Where: " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "filename" );   Console.ResetColor( );   Console.Error.WriteLine( " is the optional file to be read" );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "   command" );   Console.ResetColor( );   Console.Error.WriteLine( " is the optional command whose output is to be read" );   Console.Error.WriteLine( );   Console.Error.Write( "Options: " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "/C   C" );   Console.ResetColor( );   Console.Error.WriteLine( "oncatenate lines" );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( " /CS  C" );   Console.ResetColor( );   Console.Error.Write( "oncatenate lines with " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "S" );   Console.ResetColor( );   Console.Error.WriteLine( "paces in between" );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( " /L:n" );   Console.ResetColor( );   Console.Error.Write( " read line " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.WriteLine( "n" );   Console.ResetColor( );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( " /L:n..m" );   Console.ResetColor( );   Console.Error.Write( " read lines " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "n" );   Console.ResetColor( );   Console.Error.Write( " through " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.WriteLine( "m" );   Console.Error.Write( "   /L:n,m" );   Console.ResetColor( );   Console.Error.Write( "  read " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "m" );   Console.ResetColor( );   Console.Error.Write( " lines starting at line " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.WriteLine( "n" );   Console.ResetColor( );   Console.Error.WriteLine( "(negative numbers start counting from the end backwards)" );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "   /SE  S" );   Console.ResetColor( );   Console.Error.Write( "kip " );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "E" );   Console.ResetColor( );   Console.Error.WriteLine( "mpty lines" );   Console.ForegroundColor = ConsoleColor.White;   Console.Error.Write( "   /T   T" );   Console.ResetColor( );   Console.Error.WriteLine( "rim leading and trailing whitespace from lines" );   Console.Error.WriteLine( );   Console.Error.WriteLine( "Examples:" );   Console.Error.WriteLine( "READLINE file read the first non-empty line (default)" );   Console.Error.WriteLine( "READLINE file /L:2 /SE read the second non-empty line of file" );   Console.Error.WriteLine( "READLINE file /L:5..7 read lines 5..7 of file" );   Console.Error.WriteLine( "READLINE file /L:-1 read the last line of file" );   Console.Error.WriteLine( "READLINE file /L:-2..-1 read the last 2 lines of file" );   Console.Error.WriteLine( "READLINE file /L:-2,2 read the last 2 lines of file" );   Console.Error.WriteLine( );   Console.Error.Write( "Check for redirection by Hans Passant on " );   Console.ForegroundColor = ConsoleColor.DarkGray;   Console.Error.WriteLine( "StackOverflow.com" );   Console.Error.WriteLine( "/questions/3453220/how-to-detect-if-console-in-stdin-has-been-redirected" );   Console.ResetColor( );   Console.Error.WriteLine( );   Console.Error.WriteLine( "Written by Rob van der Woude" );   return 1;  }  #endregion }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91九色视频| 国产香蕉一区二区三区在线视频| 中文字幕欧美日韩精品| 亚洲综合精品一区二区| 国产成人在线亚洲欧美| 成人免费视频xnxx.com| 91精品国产高清自在线看超| 国产精品中文在线| 国产精品欧美日韩一区二区| 亚洲天堂免费视频| 国产经典一区二区| 91精品国产综合久久久久久蜜臀| 国产免费一区视频观看免费| 久久精品国产成人精品| 日韩av影院在线观看| 伊人激情综合网| 国产精品国产三级国产专播精品人| 欧美成人精品一区二区三区| 97久久精品人人澡人人爽缅北| 欧美日韩高清在线观看| 国产精品mp4| 国产精品一区二区性色av| 日韩美女主播视频| 91wwwcom在线观看| 欧美黄色www| 欧美精品在线免费| 亚洲精品丝袜日韩| 奇米一区二区三区四区久久| 亚洲欧美综合图区| 在线电影欧美日韩一区二区私密| 亚洲国产欧美在线成人app| 国产做受高潮69| 午夜精品国产精品大乳美女| 欧美成人精品不卡视频在线观看| 欧美精品一区三区| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲国产精品久久久久| 日韩电影大全免费观看2023年上| 日韩av电影手机在线观看| 91免费欧美精品| 色www亚洲国产张柏芝| 欧美日韩国产一中文字不卡| 粗暴蹂躏中文一区二区三区| 欧美日韩国产第一页| 一区二区三区久久精品| 国产极品精品在线观看| 日日摸夜夜添一区| xxxxx91麻豆| 国产精品亚洲第一区| 欧美性猛交xxxx免费看久久久| 日韩一区二区福利| 日韩亚洲一区二区| 日本中文字幕不卡免费| 亚洲欧美色婷婷| 另类专区欧美制服同性| 欧美精品激情blacked18| 中文字幕日韩精品在线观看| 精品无人区乱码1区2区3区在线| 国产精品久久久久久久久久三级| 富二代精品短视频| 精品国产一区av| 精品久久久久久| 欧美视频一区二区三区…| 日韩精品有码在线观看| 日韩一区二区三区在线播放| 在线视频一区二区| 成人精品一区二区三区电影免费| 亚洲精品少妇网址| 亚洲a成v人在线观看| 欧美激情图片区| 亚洲香蕉成人av网站在线观看| 在线观看国产欧美| 中文字幕av一区中文字幕天堂| 91最新在线免费观看| 91九色视频导航| 国产福利视频一区二区| 欧美黑人性猛交| 久久久www成人免费精品| 精品夜色国产国偷在线| 日韩免费看的电影电视剧大全| 色视频www在线播放国产成人| 欧美激情图片区| 日韩精品在线视频美女| 精品久久久久久久久久国产| 久久久999国产| 欧美老肥婆性猛交视频| 日韩日本欧美亚洲| 国产精品免费视频xxxx| 欧美国产乱视频| 最近2019中文字幕第三页视频| 中文字幕亚洲一区二区三区五十路| 色婷婷综合成人av| 久久影视电视剧免费网站清宫辞电视| 中文字幕亚洲无线码a| 国产精品久久久久77777| 欧美激情在线观看视频| 国外色69视频在线观看| 亚洲精品国产欧美| 日韩在线精品一区| 91天堂在线视频| 欧美区在线播放| 高跟丝袜一区二区三区| 欧美综合国产精品久久丁香| 欧美大码xxxx| 亚洲国产成人一区| 中文字幕日韩av综合精品| 亚洲激情在线视频| 亚洲第一国产精品| 久久人人97超碰精品888| 亚洲免费中文字幕| 亚洲在线视频福利| 欧美国产一区二区三区| 91精品国产综合久久久久久蜜臀| 欧美午夜视频一区二区| 国产精品无av码在线观看| 久久久久久久999精品视频| 欧美超级免费视 在线| 日韩精品999| 北条麻妃一区二区三区中文字幕| 精品国产区一区二区三区在线观看| 成人444kkkk在线观看| 2019av中文字幕| 国产精品免费视频久久久| 欧美极品美女视频网站在线观看免费| 搡老女人一区二区三区视频tv| 欧美成人午夜影院| 亚洲小视频在线| 欧美激情2020午夜免费观看| 国产欧美亚洲视频| 欧美交受高潮1| 成人黄色免费片| 亚洲精品一区在线观看香蕉| 亚洲美女免费精品视频在线观看| 国产精品91在线| 欧美成人激情视频免费观看| 欧美视频专区一二在线观看| 亚洲第一在线视频| 国产拍精品一二三| 国产精品色婷婷视频| 超在线视频97| 成人黄在线观看| 欧美大尺度激情区在线播放| 国产成人精品在线观看| 91久久久久久久| 日韩成人在线观看| 亚洲一区亚洲二区| 在线观看亚洲视频| 亚洲精品视频中文字幕| 国产精品久久久久久av福利软件| 日本国产一区二区三区| 国产91在线播放| 久久手机精品视频| 成人av番号网| 久久精品成人欧美大片| 伊人久久男人天堂| 亚洲丝袜在线视频| 国产精品久久久久久av下载红粉| 伦伦影院午夜日韩欧美限制| 亚洲美女精品成人在线视频| 欧美电影免费看| 国内精品400部情侣激情| 91视频-88av| 日韩欧美在线国产| 成人精品久久一区二区三区|