我需要编写一个程序,从文本文件中获取信息并将其上传到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);
}
问题是某些“字段”的字符长度发生了变化,所以我不能去特定位置获取信息。可能有帮助的另一件事是不同的“字段”用“Tab”空格分隔。这就是文本文件的样子:
从文本文件中获取该信息的最佳方法是什么?
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
答案 0 :(得分:0)
如果字段或列中没有tab的可能性,则可以使用string.Split()
答案 1 :(得分:0)
您可以在每个单词的开头和结尾使用字符分隔符。这样,即使字段长度不同,您也必须只搜索字段分隔符(char(28)Ascii值)。对于不同的行,您可以设置段分隔符(char(30))。如果需要进一步分离,则可以使用组分离器(char(29))。
例如: 聊天(30)+ char(28)+ STP + char(28)+ 3char(28)+ P + char(28)+ CHECKL + char(28)+ PACKAGING-VISUAL INSPECTION ..... next line 聊天(30)+炭(28)+ + STP炭(28)+ 3char(28)+ ..... 等等
答案 2 :(得分:0)
请尝试以下操作:
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;
}
}
}
}