簡體   English   中英

文本文件信息到SQL

[英]Text file info to SQL

我需要編寫一個程序,該程序從文本文件獲取信息,然后將其上載到SQL中的表中。

因此,我編寫了一個小程序,該程序從文本文件中獲取信息並將其放入TextBoxes,這似乎可以正常工作:

using (System.IO.StreamReader file = new 
System.IO.StreamReader(@"C:\Users\Chriss\Desktop\Test Eq\ATE4 Dbase 2017-05-12 - Copy.log"))
        {
            string allFile = file.ReadToEnd();
            int offset = 0;
            int length = 3;
            if (allFile.Substring(offset, length) == "NEW")
            {
                textBox1.Text = allFile.Substring(4, 10);
                textBox2.Text = allFile.Substring(15, 8);
                textBox3.Text = allFile.Substring(24, 22);
                textBox4.Text = allFile.Substring(47, 4);
                textBox5.Text = allFile.Substring(53, 7);
            }

問題是某些“字段”的字符長度發生了變化,因此我無法在特定位置獲取信息。 可能有幫助的另一件事是,將不同的“字段”用“制表符”空間隔開。 文本文件如下所示:

在此處輸入圖片說明

從文本文件中獲取該信息的最佳方法是什么?

NEW 2017/05/12  08:27:09    05001432917TSA5009R00.  SPS2        TSA5009 R.JONES 230230  P   0
  STP   3   P   CHECKL  PACKAGING-VISUAL INSPECTION CARTON QUALITY & CONDITION  P   PRINTING FINISH & CONTENT   P   BAR CODE    P   CARTON CERTIFICATION    P   ALL PARTS ARE PRESENT   P   FOUR FEET   P   LATEST VERSION OF INSTRUCTION MANUAL    P                           1.1         G   S                               
  STP   4   P   CHECKL  COSMETIC AND CONSTRUCTION-VISUAL    ENCLOSURE AND COSMETICS P   SCRATCHES   P   PROPERLY CLEANED    P   WELDS FINISHED SMOOTH AND COLOUR REMOVED    P   SINK MARKS  P   FIT AND FINISH  P   COMPONENTS AND MATERIALS    P   COMPONENTS/ MATERIALS AS PER PRODUCT DESCRIPTION    P                   3.4         S   S                               
  STP   5   P   CHECKL  COSMETICS AND CONSTRUCTION-VISUAL   COMPONENTS AND MATERIALS AS PER AGENCY REPORT   P   FLASH AND SHARP EDGES   P   RATING LABEL    P   CERTIFICTAION MARKING AND REQUIRED DATA P   LABEL OR IMPRINT PERMANENT  P   REQUIRED WARNING LABELS PRESENT AND LEDGIBLE    P   PRODUCT ARTWORK P                           3.5         G   S                               
  STP   6   P   CHECKL  PERFORMANCE TEST AS PER UL197   PERFORMANCE TEST 100% OF PRODUCTION P   THERMOSTAT FUNCTION P   CORD STAIN RELIEF   P   INDICATOR FUNCTION  P   POWER CABLE S.A 230V    P   PILOT LIGHT RED 230V    P                                   3.7         G   S                               
  STP   9   P   DSHORT1P        0.00    P   0.000                                                                       10.2    3   0.5 0.4 0                               
  STP   10  P   ECON        0.12    P   1.20        12.21                                                               15.0    3   1.5 0.3                                 
  STP   11  P   INSMEG      508 P   5.0 P   0.0                                                             20.3    2   2.5 0   500                             
  STP   12  P   INSLEAK     1500    P   0.00    P                                                                   24.4    1   2.5 5   0   1000                            
  STP   14  P   LOADELA ELEMENT 7.698   P   999.0       230.000     7.698       1770        1770        0.00000                             37.9    5   2   8.6 1.5 .5  0   0   A   1           
  PRN   PIC DSCF1383.JPG    50  50
  PRN   TX1 Serial No.: 05001432917TSA5009R00.      12  0   0   0   B
  PRN   TX1 2017/05/12 08:27 SPS2,      11  0   0   0   B
  PRN   TX1 Schedule: TSA5009       10  0   0   0   B
  PRN   TX1 Operator: R.JONES       10  0   0   0   B
  PRN   GAP 0   0   0   0
  PRN   TX1 TSA5009     10  0   0   0   B
  PRN   TX1 TSA5009 230V-50HZ       10  0   0   0   B
  PRN   TX1 MORE MODEL INFO     10  0   0   0   B
   PRN  TX2 Checklist, CARTON QUALITY & CONDITION   Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, PRINTING FINISH & CONTENT    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, BAR CODE Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, CARTON CERTIFICATION Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, ALL PARTS ARE PRESENT    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, FOUR FEET    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, LATEST VERSION OF INSTRUCTION MANUAL Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, ENCLOSURE AND COSMETICS  Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, SCRATCHES    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, PROPERLY CLEANED Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, WELDS FINISHED SMOOTH AND COLOUR REMOVED Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, SINK MARKS   Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, FIT AND FINISH   Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, COMPONENTS AND MATERIALS Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, COMPONENTS/ MATERIALS AS PER PRODUCT DESCRIPTION Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, COMPONENTS AND MATERIALS AS PER AGENCY REPORT    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, FLASH AND SHARP EDGES    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, RATING LABEL Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, CERTIFICTAION MARKING AND REQUIRED DATA  Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, LABEL OR IMPRINT PERMANENT   Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, REQUIRED WARNING LABELS PRESENT AND LEDGIBLE Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, PRODUCT ARTWORK  Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, PERFORMANCE TEST 100% OF PRODUCTION  Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, THERMOSTAT FUNCTION  Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, CORD STAIN RELIEF    Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, INDICATOR FUNCTION   Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, POWER CABLE S.A 230V Pass    10  0   0   0   G   0
   PRN  TX2 Checklist, PILOT LIGHT RED 230V Pass    10  0   0   0   G   0
   PRN  TX2 Dead Short Test 0.00 A  10  0   0   0   G   0
   PRN  TX2 Ground Bonding Test 0.12 Ohms   10  0   0   0   G   0
   PRN  TX2 Insulation Test 508V    508 V   5.0 MOhms   10  0   0   0   G   0
   PRN  TX2 Insulation Test 1500V   1 500 V   0.00 mA   10  0   0   0   G   0
   PRN  TX2 Load Test 0V, ELEMENT   7.698 A 10  0   0   0   G   0
  PRN   GAP 0   0   0   0
  PRN   TX1 PASS        10  0   0   0   G
END
NEW 2017/05/12  12:11:01    05001475617FHG7552R01.  ATE 3 PHASE VOLLRATH    FHG7552 R.JONES 400230  P   0
  STP   2   P   CHECKL  CHECK ITEM  BASE MOUNTING BRACKET WELDED CORRECTLY  P   PAINTWORK ON BASE CORRECT   P   ALL MOUNTING BOLTS ARE FASTENED P   MOTOR HAS ADEQUATE OIL  P   BEARING SLEEVES AND DRIVE SHAFT PRESSED CORRECTLY   P   ALL COMPONENTS ARE GREASED PROPERLY P   BEARING HOUSING PROPERLY MOUNTED ON BASE    P                           0.3         G   S                               
  STP   3   P   CHECKL  CHECK ITEM  TOP & BOTTOM SPROCKETS MOUNTED CORRECTLY    P   SPROCKETS ARE SQUARE- IN LINE WITH EACH OTHER   P   CHAIN IS GREASED-MOUNTED CORRECTLY  P   CHAIN DOES NOT HAVE A LOT OF SLACK  P   BODY WRAP IS FREE FROM DENTS-SCRATCHES-BURNS    P   WIRING  IS CORRECT AND NEATLY CABLE TIED    P   CHECK START-STOP & SELECTOR SWITCH OPERATIONAL  P   FITMENT OF WORM-KNIFE-PLATE &LOCK RING IS CORRECT   P                   1.3         G   S                               
  STP   4   P   CHECKL  CHECK ITEM  BARREL CENTERED AND FASTENED PROPERLY   P   FRONT STUD FLUSH ON FACE OF WORM    P   WORM SLOTS INTO DRIVE SHAFT EASILY  P   WORM ROTATES FREELY IN BARREL   P   FITMMENT OF PLATE MUST BE HALF INTO BARREL  P   FITMENT OF TRAY IS CORRECT  P   HANDGUARD SHIELD MOUNTED CORECTLY   P   BRANDING AND SERIAL PLATE DATA IS CORRECT   P                   1.5         G   S                               
  STP   5   P   CHECKL  CHECK ITEM  WARNING LABELS PRESENT  P   SERIAL NUMBER ENGRAVED ON BARREL,WORM,LOCKRING  P   SERIAL NUMBER ENGRAVED ON BEARING HOUSING & SPROCKET;MOTOR  P   RED INDICATOR ARROW ON BARRELL  P   UNIT PROPERLY SHRINKED & CRATED P   UNIT IS PROPERLY BOLTED TO PALLET   P                                   1.7         G   S                               
  STP   6   P   CHECKL  ACCESSORY LIST  1X19 SPANNER    P   1X STOMPER  P   1X NUT SPANNER  P   2 X KNIVES  P   1 X 4.76MM PLATE    P   1 X 12.7MM PLATE    P   INSTRUCTION MANUAL  P   SPLASH GUARD    P                   2.0         G   S                               
  STP   7   P   CHECKL  ACCESSORY LIST  1  X 5MM ALLEN KEY  P   4 PLASTIC FEET  P   ALL   ACCESSORIES PACKED IN BOX P   ACCESSORIES WRAPPED P   ACCESSORY BOX SHRINKED TO MACHINE   P                                           2.2         G   S                               
  STP   10  P   DSHORT3P        0.05    P   0.64    P   0.12    P   226.694                                                     12.3    3   1.5 10  0                               
  STP   11  P   ECON        0.00    P   12.21       5.07                                                                15.8    2   1.5 100                                 
  STP   12  P   INSMEG      497 P   10.0    P   0.2                                                             21.3    3   2.5 1   400                             
  STP   13  P   INSLEAK     1153    P   1.09    P                                                                   26.8    3   2.5 4   0   1100                            
  STP   16  P   LOADEL3W        5598    P   0.2 P   391.635     4.575       4.543       5.176       1792        1779        2027                36.8    5   2   5500    100 1200    0.5 1   A               
  PRN   TX1 Serial No.: 05001475617FHG7552R01.      8   0   0   0   B
  PRN   TX1 2017/05/12 12:11 ATE 3 PHASE, VOLLRATH      7   0   0   0   B
  PRN   TX1 Schedule: FHG7552       10  0   0   0   B
  PRN   TX1 Operator: R.JONES       10  0   0   0   B
  PRN   GAP
  PRN   TX1 THREE PHASE 400V-50HZ       7   0   0   0   B
  PRN   TX1 MORE MODEL INFO     7   0   0   0   B
   PRN  TX2 Checklist, BASE MOUNTING BRACKET WELDED CORRECTLY   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, PAINTWORK ON BASE CORRECT    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, ALL MOUNTING BOLTS ARE FASTENED  Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, MOTOR HAS ADEQUATE OIL   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, BEARING SLEEVES AND DRIVE SHAFT PRESSED CORRECTLY    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, ALL COMPONENTS ARE GREASED PROPERLY  Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, BEARING HOUSING PROPERLY MOUNTED ON BASE Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, TOP & BOTTOM SPROCKETS MOUNTED CORRECTLY Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, SPROCKETS ARE SQUARE- IN LINE WITH EACH OTHER    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, CHAIN IS GREASED-MOUNTED CORRECTLY   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, CHAIN DOES NOT HAVE A LOT OF SLACK   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, BODY WRAP IS FREE FROM DENTS-SCRATCHES-BURNS Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, WIRING  IS CORRECT AND NEATLY CABLE TIED Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, CHECK START-STOP & SELECTOR SWITCH OPERATIONAL   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, FITMENT OF WORM-KNIFE-PLATE &LOCK RING IS CORRECT    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, BARREL CENTERED AND FASTENED PROPERLY    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, FRONT STUD FLUSH ON FACE OF WORM Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, WORM SLOTS INTO DRIVE SHAFT EASILY   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, WORM ROTATES FREELY IN BARREL    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, FITMMENT OF PLATE MUST BE HALF INTO BARREL   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, FITMENT OF TRAY IS CORRECT   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, HANDGUARD SHIELD MOUNTED CORECTLY    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, BRANDING AND SERIAL PLATE DATA IS CORRECT    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, WARNING LABELS PRESENT   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, SERIAL NUMBER ENGRAVED ON BARREL,WORM,LOCKRING   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, SERIAL NUMBER ENGRAVED ON BEARING HOUSING & SPROCKET;MOTOR   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, RED INDICATOR ARROW ON BARRELL   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, UNIT PROPERLY SHRINKED & CRATED  Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, UNIT IS PROPERLY BOLTED TO PALLET    Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 1X19 SPANNER Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 1X STOMPER   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 1X NUT SPANNER   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 2 X KNIVES   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 1 X 4.76MM PLATE Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 1 X 12.7MM PLATE Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, INSTRUCTION MANUAL   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, SPLASH GUARD Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 1  X 5MM ALLEN KEY   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, 4 PLASTIC FEET   Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, ALL   ACCESSORIES PACKED IN BOX  Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, ACCESSORIES WRAPPED  Pass    7   0   0   0   G   0
   PRN  TX2 Checklist, ACCESSORY BOX SHRINKED TO MACHINE    Pass    7   0   0   0   G   0
   PRN  TX2 Dead Short Test Pass    7   0   0   0   G   0
   PRN  TX2 Earth Con. Test Pass    7   0   0   0   G   0
   PRN  TX2 Insulation 500V DC  Pass    7   0   0   0   G   0
   PRN  TX2 Insulation 1250V/1500V  Pass    7   0   0   0   G   0
   PRN  TX2 Load Test   Pass    7   0   0   0   G   0
   PRN  TX2 Earth Leak Test Pass    7   0   0   0   G   0
  PRN   GAP
  PRN   TX1 PASS        10  0   0   0   G
END

如果在字段或列中沒有制表符的機會,則可以使用string.Split()

用制表符分隔字符串

您可以在每個單詞的開頭和結尾使用字符分隔符。 這樣,即使字段長度發生變化,您也僅需要搜索字段分隔符(char(28)Ascii值)。 對於不同的行,可以設置段分隔符(char(30))。 如果需要進一步分離,則可以使用組分隔符(char(29))。

例如:chat(30)+ char(28)+ STP + char(28)+ 3char(28)+ P + char(28)+ CHECKL + char(28)+ PACKAGING-VISUAL INSPECTION .....下一行聊天(30)+字符(28)+ STP +字符(28)+3字符(28)+ .....等等

嘗試以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";
        static void Main(string[] args)
        {
            new Process(FILENAME);

        }
    }
    public enum FUNCTION_TYPES
    {
        STEP,
        PRINT
    }
    public enum PRINT_TYPES
    {
        PIC,
        GAP,
        TXT1,
        TXT2
    }
    public class Process
    {
        public static List<Process> processes = new List<Process>();
        public DateTime date { get; set; }
        public string description { get; set; }
        public List<Function> functions = null;

        public Process() 
        {
            functions = new List<Function>();
        }
        public Process(string filename)
        {
            Process newProcess = null;

            string cmdPattern = @"^(?'cmd'[^\s]+)";
            string newPattern = @"^(?'cmd'[^\s]+)\s+(?'date'[^\s]+)\s+(?'time'[^\s]+)\s+(?'description'.*)";
            Match match;


            StreamReader reader = new StreamReader(filename);
            string inputLine = "";
            while((inputLine = reader.ReadLine()) != null)
            {
                inputLine = inputLine.Trim();
                string command = Regex.Match(inputLine, cmdPattern).Groups["cmd"].Value;

                switch (command)
                {
                    case "NEW" :
                        newProcess = new Process();
                        processes.Add(newProcess);
                        match = Regex.Match(inputLine, newPattern);
                        date = DateTime.Parse(match.Groups["date"].Value + " " + match.Groups["time"].Value);
                        description = match.Groups["description"].Value;
                        break;
                    case "STP":
                        newProcess.functions.Add(new Step(inputLine));
                        break;
                    case "PRN":
                        newProcess.functions.Add(new Print(inputLine));
                        break;
                    case "END":
                        newProcess = null;
                        break;
                }

            }
        }
    }
    public class Function
    {
        public FUNCTION_TYPES function { get; set; }
    }
    public class Step : Function
    {
        public int number { get; set; }
        public List<string> stepArray { get; set; }

        public Step(string stepStr)
        {
            function = FUNCTION_TYPES.STEP;
            stepArray = stepStr.Split(new string[] {" P "}, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()).ToList();
            string stepPattern = @"^(?'cmd'[^\s]+)\s+(?'number'[^\s]+)";
            Match match = Regex.Match(stepArray[0], stepPattern);
            number = int.Parse(match.Groups["number"].Value);
        }
    }
    public class Print : Function
    {
        public PRINT_TYPES printType { get; set; }
        public string imageFilename { get; set; }
        public int imageHeight { get; set; }
        public int imageWidth { get; set; }

        public string functionName { get; set; }
        public string[] functionArray { get; set; }

        public int[] gapArray { get; set; }

        public string txName { get; set; }
        public string[] txArray { get; set; }

        public Print(string printStr)
        {
            Match match;

            function = FUNCTION_TYPES.PRINT;

            string typePattern = @"^(?'cmd'[^\s]+)\s+(?'type'[^\s]+)";

            match = Regex.Match(printStr, typePattern);
            string typeStr = match.Groups["type"].Value;


            switch (typeStr)
            {
                case "PIC" :
                    printType = PRINT_TYPES.PIC;
                    string picturePattern = @"^(?'cmd'[^\s]+)\s+(?'type'[^\s]+)\s+(?'filename'[^\s]+)\s+(?'height'[^\s]+)\s+(?'width'.*)";
                    match = Regex.Match(printStr, picturePattern);

                    imageFilename = match.Groups["filename"].Value;
                    imageHeight = int.Parse(match.Groups["height"].Value);
                    imageWidth = int.Parse(match.Groups["width"].Value);
                    break;
                case "TX1":
                    printType = PRINT_TYPES.TXT1;

                    string tx1Pattern = @"^(?'cmd'[^\s]+)\s+(?'type'[^\s]+)\s+(?'txname'.+)(?'tx1'\d+)\s+(?'tx2'\d+)\s+(?'tx3'\d+)\s+(?'tx4'\d+)\s+(?'tx5'\w+)$";
                    match = Regex.Match(printStr, tx1Pattern, RegexOptions.RightToLeft);
                    txName = match.Groups["txname"].Value;
                    txArray = new string[] {
                        match.Groups["tx1"].Value,
                        match.Groups["tx2"].Value,
                        match.Groups["tx3"].Value,
                        match.Groups["tx4"].Value,
                        match.Groups["tx5"].Value
                    };

                    break;
                case "TX2":
                    printType = PRINT_TYPES.TXT2;

                    string tx2Pattern = @"^(?'cmd'[^\s]+)\s+(?'type'[^\s]+)\s+(?'txname'.+)\s+Pass\s+(?'tx1'\d+)\s+(?'tx2'\d+)\s+(?'tx3'\d+)\s+(?'tx4'\d+)\s+(?'tx5'\w+)\s+(?'tx6'\d+)$";
                    match = Regex.Match(printStr, tx2Pattern, RegexOptions.RightToLeft);
                    txName = match.Groups["txname"].Value;
                    txArray = new string[] {
                        match.Groups["tx1"].Value,
                        match.Groups["tx2"].Value,
                        match.Groups["tx3"].Value,
                        match.Groups["tx4"].Value,
                        match.Groups["tx5"].Value,
                        match.Groups["tx6"].Value
                    };

                    break;
                case "GAP":
                    printType = PRINT_TYPES.GAP ;

                    string[] gapArrayStr = printStr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    gapArray = gapArrayStr.Skip(2).Select(x => int.Parse(x)).ToArray();
                    break;
            }

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM