จะทำโปรเจคของ Visual Studio อ่ะค่ะ รบกวนท่านที่มีความรู้หน่อยนะค่ะ
บน .NET ใช้ Charts Control ได้เลยครับ ง่ายสุด ๆ
Date :
2015-08-02 10:43:10
By :
mr.win
ขอบคุณค่ะ
ใช่ VB.NET Read Text File ได้แล้ว แต่เอามาเก็บใน Array ไม่ได้อ่ะคะ
ใครพอมีความรู้ VB.NET เรื่อง Array 2D บ้างคะ และก็อีกเรื่องที่สงสัย VB.NET สามารถนำ Array ไปทำเป็นกราฟได้รึเปล่าคะ
รอกวนด้วยค่ะ...
Date :
2015-08-05 11:40:34
By :
Jirata
ลองใช้พวก List หรือ DataTable แทนล่ะครับ ลองดูตัวอย่าง List ครับ
List (VB.NET)
Imports System.Collections.Generic
' Simple business object. A PartId is used to identify the type of part
' but the part name can change.
Public Class Part
Implements IEquatable(Of Part)
Public Property PartName() As String
Get
Return m_PartName
End Get
Set(value As String)
m_PartName = Value
End Set
End Property
Private m_PartName As String
Public Property PartId() As Integer
Get
Return m_PartId
End Get
Set(value As Integer)
m_PartId = Value
End Set
End Property
Private m_PartId As Integer
Public Overrides Function ToString() As String
Return "ID: " & PartId & " Name: " & PartName
End Function
Public Overrides Function Equals(obj As Object) As Boolean
If obj Is Nothing Then
Return False
End If
Dim objAsPart As Part = TryCast(obj, Part)
If objAsPart Is Nothing Then
Return False
Else
Return Equals(objAsPart)
End If
End Function
Public Overrides Function GetHashCode() As Integer
Return PartId
End Function
Public Overloads Function Equals(other As Part) As Boolean _
Implements IEquatable(Of Part).Equals
If other Is Nothing Then
Return False
End If
Return (Me.PartId.Equals(other.PartId))
End Function
' Should also override == and != operators.
End Class
Public Class Example
Public Shared Sub Main()
' Create a list of parts.
Dim parts As New List(Of Part)()
' Add parts to the list.
parts.Add(New Part() With { _
.PartName = "crank arm", _
.PartId = 1234 _
})
parts.Add(New Part() With { _
.PartName = "chain ring", _
.PartId = 1334 _
})
parts.Add(New Part() With { _
.PartName = "regular seat", _
.PartId = 1434 _
})
parts.Add(New Part() With { _
.PartName = "banana seat", _
.PartId = 1444 _
})
parts.Add(New Part() With { _
.PartName = "cassette", _
.PartId = 1534 _
})
parts.Add(New Part() With { _
.PartName = "shift lever", _
.PartId = 1634 _
})
' Write out the parts in the list. This will call the overridden ToString method
' in the Part class.
Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next
' Check the list for part #1734. This calls the IEquitable.Equals method
' of the Part class, which checks the PartId for equality.
Console.WriteLine(vbLf & "Contains(""1734""): {0}", parts.Contains(New Part() With { _
.PartId = 1734, _
.PartName = "" _
}))
' Insert a new item at position 2.
Console.WriteLine(vbLf & "Insert(2, ""1834"")")
parts.Insert(2, New Part() With { _
.PartName = "brake lever", _
.PartId = 1834 _
})
'Console.WriteLine();
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next
Console.WriteLine(vbLf & "Parts[3]: {0}", parts(3))
Console.WriteLine(vbLf & "Remove(""1534"")")
' This will remove part 1534 even though the PartName is different,
' because the Equals method only checks PartId for equality.
parts.Remove(New Part() With { _
.PartId = 1534, _
.PartName = "cogs" _
})
Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next
Console.WriteLine(vbLf & "RemoveAt(3)")
' This will remove part at index 3.
parts.RemoveAt(3)
Console.WriteLine()
For Each aPart As Part In parts
Console.WriteLine(aPart)
Next
End Sub
'
' This example code produces the following output:
' ID: 1234 Name: crank arm
' ID: 1334 Name: chain ring
' ID: 1434 Name: regular seat
' ID: 1444 Name: banana seat
' ID: 1534 Name: cassette
' ID: 1634 Name: shift lever
'
' Contains("1734"): False
'
' Insert(2, "1834")
' ID: 1234 Name: crank arm
' ID: 1334 Name: chain ring
' ID: 1834 Name: brake lever
' ID: 1434 Name: regular seat
' ID: 1444 Name: banana seat
' ID: 1534 Name: cassette
' ID: 1634 Name: shift lever
'
' Parts[3]: ID: 1434 Name: regular seat
'
' Remove("1534")
'
' ID: 1234 Name: crank arm
' ID: 1334 Name: chain ring
' ID: 1834 Name: brake lever
' ID: 1434 Name: regular seat
' ID: 1444 Name: banana seat
' ID: 1634 Name: shift lever
' '
' RemoveAt(3)
'
' ID: 1234 Name: crank arm
' ID: 1334 Name: chain ring
' ID: 1834 Name: brake lever
' ID: 1444 Name: banana seat
' ID: 1634 Name: shift lever
'
End Class
Date :
2015-08-05 11:50:14
By :
mr.win
ลืมดูว่า C# นี่ง่ายเลยครับ
Code (C#)
public class FileDetail
{
public string ID { get; set; }
public string VALUE { get; set; }
}
Code (C#)
var list = new List<FileDetail>();
for (int i = 1; i <= 10; i++)
{
list.Add(new FileDetail { ID = i.ToString(),VALUE = "XYZ"; });
}
Code (C#)
// get
foreach(FileDetail item in list)
{
//item.ID;
//item.VALUE;
}
Date :
2015-08-05 11:54:06
By :
mr.win
หาๆ เปลี่ยนเป็น c# หรอคะ VB.NET นี่ก็ งง แล้ว T_T
Date :
2015-08-05 12:45:32
By :
Jirata
Code (VB.NET)
Public Class FileDetail
Public Property ID() As String
Get
Return m_ID
End Get
Set
m_ID = Value
End Set
End Property
Private m_ID As String
Public Property VALUE() As String
Get
Return m_VALUE
End Get
Set
m_VALUE = Value
End Set
End Property
Private m_VALUE As String
End Class
Code (VB.NET)
For i As Integer = 1 To 10
list.Add(New Part() With { _
.ID = i.ToString(), _
.VALUE = "XYZ" _
})
Next
Code (VB.NET)
For Each item As FileDetail In list
item.ID
item.VALUE
Next
Date :
2015-08-05 13:11:27
By :
mr.win
พี่ค่ะ มันจะพอทำได้จริงรึเปล่า ที่จะ อ่านไฟล์ text มาเก็บใน array แล้วนำ array มาทำเป็นกราฟ และจะใช้ภาษาอะไรที่ง่ายต่อการเขียนคะ C#, VB.NET
Date :
2015-08-06 10:05:55
By :
Jirata
ต้องดูก่อนว่ากราฟมันรับค่าแบบไหน
Date :
2015-08-06 10:20:23
By :
mr.win
ลองทำให้ดูครับ ถูกผิดอย่าว่ากันนะครับผม ท่านอื่นเสริมได้นะครับ
และขอโทษด้วยนะครับที่เป็น C# เนื่องจากไม่ได้เขียน VB.NET นาน สนิมขึ้นแล้วครับผม
ผมลองมั่วๆข้อมูลขึ้นมาเองตามที่เห็นนะครับ
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
24/06/15 00:30:00;22.38;22.32;22.25;167;165;174
24/06/15 01:30:00;22.37;22.45;22.22;166;162;171
24/06/15 02:30:00;22.28;22.50;22.21;161;164;173
24/06/15 03:30:00;22.18;22.56;22.24;162;162;172
24/06/15 04:30:00;22.08;22.53;22.26;165;168;171
24/06/15 05:30:00;22.34;22.51;22.20;168;163;175
24/06/15 06:30:00;22.35;22.54;22.22;162;163;176
24/06/15 07:40:00;22.33;22.58;22.21;169;164;172
ถ้าทำได้แล้วเรื่องกราฟก็ไม่มีปัญหาครับผม
Code (C#)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string[] lines = System.IO.File.ReadAllLines(@"D:\logTest.txt");
// Display the file contents by using a foreach loop.
System.Console.WriteLine("Contents of WriteLines2.txt = ");
int lineNum = 0;
logmaster logM = new logmaster();
logM._logdetail = new List<logdetail>();
foreach (string line in lines)
{
lineNum++;
if (lineNum == 1)
{
logM.title_a = line;
// Use a tab to indent each line of the file.
Console.WriteLine("\t" + logM.title_a);
}
if (lineNum == 2)
{
logM.title_b = line;
Console.WriteLine("\t" + logM.title_b);
}
if (lineNum == 3)
{
logM.title_c = line;
Console.WriteLine("\t" + logM.title_c);
}
if (lineNum > 4)
{
string str;
string[] strArray;
str = line;
strArray = str.Split(';');
logdetail currentLog = new logdetail();
currentLog.Date_Time = strArray[0];
currentLog.KV_AB = strArray[1];
currentLog.kV_BC = strArray[2];
currentLog.kV_CA = strArray[3];
logM._logdetail.Add(currentLog);
}
}
Console.WriteLine("\n");
foreach(var l in logM._logdetail)
{
Console.WriteLine("\tDate Time = {0};KV_AB={1};kV_BC={2}", l.Date_Time,l.KV_AB,l.kV_BC);
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
public class logmaster
{
public string title_a { get; set; }
public string title_b { get; set; }
public string title_c { get; set; }
public List<logdetail> _logdetail { get; set; }
}
public class logdetail
{
//Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
public string Date_Time { get; set; }
public string KV_AB { get; set; }
public string kV_BC { get; set; }
public string kV_CA { get; set; }
public string IA { get; set; }
public string IB { get; set; }
public string IC { get; set; }
}
}
Date :
2015-08-06 11:28:19
By :
บัญดิษฐ
อ่อคืออยากจะใช้ Report Application โชว์กราฟนะ แต่ งง ตรงที่รับค่าของกราฟ เพราะว่าค่าที่จะโชว์ข้อมูลของกราฟจะมาจากไฟล์ text แต่ในโปรแกรมให้ข้อมูลตามรูปอะคะ เลยไม่รู้จะทำไง
Date :
2015-08-06 11:38:40
By :
Jirata
โทษนะค่ะ คุณGuest ลองเอาไปวางแล้วมี Error อ่ะ
Date :
2015-08-06 14:46:59
By :
Jirata
ขอโทษครับ แนะนำไปไม่หมด
คือ report ก่อนจะออกแบบมันจำเป็นจะต้องมี Data Set หรือ Object หรือไม่ก็มีฐานข้อมูลว่างั้น
แต่ที่นี้เราไม่มี เราจึงจำเป็นจะต้องสร้างเพื่อให้มันเอามาใช้ออกแบบ ลากๆวางๆ (มันมีแบบขั้นเทพอยู่ คือพวกนี้เขียนสด ไม่แนะนำ)
ผมก็เลยสร้าง class มาให้ดูครับว่าจะเอาข้อมูลจาก Text มาเก็บได้อย่างไรและจะใช้ต่ออย่างไง
จึงทำตัวอย่างให้ดูเลย ตามนี้นะครับ
ถ้าต้องการ code ทั้งหมดเลย ก็โหลดตามนี้นะครับ
https://onedrive.live.com/redir?resid=5428FFE448EF4FF3!522&authkey=!ADyNDUH6KUwhX9M&ithint=file%2c7z
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication2
{
public class logmaster
{
public string title_a { get; set; }
public string title_b { get; set; }
public string title_c { get; set; }
public List<logdetail> _logdetail { get; set; }
public logmaster()
{
}
public static logmaster getLogmaster()
{
string[] lines = System.IO.File.ReadAllLines(@"D:\logTest.txt");
int lineNum = 0;
logmaster logM = new logmaster();
logM._logdetail = new List<logdetail>();
foreach (string line in lines)
{
lineNum++;
if (lineNum == 1)
{
logM.title_a = line;
Console.WriteLine("\t" + logM.title_a);
}
if (lineNum == 2)
{
logM.title_b = line;
Console.WriteLine("\t" + logM.title_b);
}
if (lineNum == 3)
{
logM.title_c = line;
Console.WriteLine("\t" + logM.title_c);
}
if (lineNum > 4)
{
string str;
string[] strArray;
str = line;
strArray = str.Split(';');
logdetail currentLog = new logdetail();
currentLog.Date_Time = strArray[0];
currentLog.KV_AB = double.Parse(strArray[1]);
currentLog.kV_BC = double.Parse(strArray[2]);
currentLog.kV_CA = double.Parse(strArray[3]);
currentLog.IA = double.Parse(strArray[4]);
currentLog.IB = double.Parse(strArray[5]);
currentLog.IC = double.Parse(strArray[6]);
logM._logdetail.Add(currentLog);
}
}
return logM;
}
}
public class logdetail
{
//Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
public string Date_Time { get; set; }
public double KV_AB { get; set; }
public double kV_BC { get; set; }
public double kV_CA { get; set; }
public double IA { get; set; }
public double IB { get; set; }
public double IC { get; set; }
}
}
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.logmasterBindingSource.DataSource = logmaster.getLogmaster();
this.reportViewer1.RefreshReport();
}
}
}
Date :
2015-08-06 14:54:43
By :
บัญดิษฐ
อ่อๆ ขอบคุณมากเลยนะค่ะ ที่ช่วยแนะนำและทำให้ดูนะค่ะ
Date :
2015-08-06 15:48:52
By :
Jirata
code โหลดไม่ได้อ่ะ
Date :
2015-08-06 15:54:09
By :
Jirata
โหลดได้แล้วนะคะ ขอบคุณมากๆค่ะ
Date :
2015-08-07 09:44:46
By :
Jirata
พี่ Guest คะ อธิบายให้หน่อย ค่ะ
แก้ไปแก้มา เข้าไม่ได้เลย Error The Logarithm Base must be equal or greater than 2.0 Parameter name: value
ไม่เข้าใจ ตรง title_a, title_b, title_c ที่อยู่ในเงื่อนไข if (lineNum == 1,2,3,) และก็ if (lineNum > 4) อ่ะ ไม่รู้ทำไมไปโชว์ในกราฟแค่ 4 ค่า ไม่มาเหมือนในตารางเลย
และก็จะทำหน้า Report ให้มี 2 หัวข้อยังไงอ่ะ หน้า Graph Curve กับ หน้า Databaes Table ละหน้ากราฟ มี 5 กราฟ A4แนวนอน อ่ะคะ แต่หน้าตาราง แนวตั้ง อันเดียว รบกวนหน่อยนะค่ะ
Date :
2015-11-17 13:56:09
By :
Jirata
ฮาฮาฮา ผมก็นึกว่าผ่านไปด้วยดีแล้ว พอเปิดมาดูเราตอบนี้หว่า เอางั้นต่ออีกหน่อย
ที่ if lineNum 123 และ 4 นั้น มันไม่มีอะไรหรอกครับ แค่จะทำให้เห็นว่าเรากำลังอ่าน
แถวที่เท่าไร ทีแรกว่าจะข้ามไปอ่านแถวที่ 5 เลยก็ได้(แถวใน Text file)
เช่น
lineNum[1] = BANPUE
lineNum[2] = Load Report -22kv Outgoing No.3
lineNum[3] = Load Report -22kv Outgoing No.3
lineNum[4] = Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
lineNum[] > 4 ก็คือแถวที่ 5...
Text file ผมทำตัวอย่างตามที่เห็นครับ
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
24/06/15 00:30:00;22.38;22.32;22.25;167;165;174
24/06/15 01:30:00;22.37;22.45;22.22;166;162;171
24/06/15 02:30:00;22.28;22.50;22.21;161;164;173
24/06/15 03:30:00;22.18;22.56;22.24;162;162;172
24/06/15 04:30:00;22.08;22.53;22.26;165;168;171
24/06/15 05:30:00;22.34;22.51;22.20;168;163;175
24/06/15 06:30:00;22.35;22.54;22.22;162;163;176
24/06/15 07:40:00;22.33;22.58;22.21;169;164;172
ส่วนที่ว่าอ่านแล้วไม่ได้นี้ไม่รู้เป็นเพราะอะไร เพราะไปลบ 4 แถวทิ้งหรือเพิ่มอันนี้ก็มีส่วนครับ ถ้าอย่างไงลองตัดส่วน Text file บางส่วน
เอามาให้ดูก็ได้ครับ ส่วนเรื่องการออกแบบ Report (ไม่ได้ออกตัวนะ ผมก็ศึกษามาได้ไม่มากหนักเกี่ยวกับการใช้ Report Viewer ครับผม)
เพราะส่วนมากจะใช้แต่ Crystal report หรือไม่ลองหาหนังสือเกี่ยวกับ Report Viewer มาอ่านดูครับ หรือทำตามท่าน Admin ที่สอน
อยู่ในเว็บบอร์ดนี้ก็ได้ครับ ผมก็มาศึกษาอยู่เป็นประจำ
https://www.thaicreate.com/dotnet/reportviewer-parameter.html
และก็ผมชื่อ บัญดิษฐ ครับผม
Date :
2015-11-17 16:03:36
By :
บัญดิษฐ
หวัดดีค่ะ พี่ บัญดิษฐ ตอนนี่ทำหาย Error แล้ว
แต่ก็ติดเหมือนเดิมค่ะ งานนี้อีกนานเลย
+++++++++++++++++++++++++++++++++++
Date :
2015-11-17 16:46:20
By :
Jirata
ลองดูตาม Code นี้นะครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication2
{
public class logmaster
{
public string title_a { get; set; }
public string title_b { get; set; }
public string title_c { get; set; }
public List<logdetail> _logdetail { get; set; }
public logmaster()
{
}
public static logmaster getLogmaster()
{
string[] lines = System.IO.File.ReadAllLines(@"D:\logTest.txt");
int lineNum = 0;
logmaster logM = new logmaster();
logM._logdetail = new List<logdetail>();
foreach (string line in lines)
{
lineNum++;
if (lineNum == 1)
{
logM.title_a = line;
Console.WriteLine("\t" + logM.title_a);
}
if (lineNum == 2)
{
logM.title_b = line;
Console.WriteLine("\t" + logM.title_b);
}
if (lineNum == 3)
{
logM.title_c = line;
Console.WriteLine("\t" + logM.title_c);
}
if (lineNum > 4)
{
string str;
string[] strArray;
str = line;
strArray = str.Split(';');
logdetail currentLog = new logdetail();
currentLog.Date_Time = strArray[0];
currentLog.KV_AB = double.Parse(strArray[1]);
currentLog.kV_BC = double.Parse(strArray[2]);
currentLog.kV_CA = double.Parse(strArray[3]);
currentLog.IA = double.Parse(strArray[4]);
currentLog.IB = double.Parse(strArray[5]);
currentLog.IC = strArray[6].IsNumeric();//เขียน Extensions เพิ่มขึ้นมาว่าตรวจว่าเป็นตัวเลขหรือไหม
logM._logdetail.Add(currentLog);
}
}
return logM;
}
}
public class logdetail
{
//Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
public string Date_Time { get; set; }
public double KV_AB { get; set; }
public double kV_BC { get; set; }
public double kV_CA { get; set; }
public double IA { get; set; }
public double IB { get; set; }
public double IC { get; set; }
}
//เพิ่ม Extensions อย่าถามนะครับผมว่ามันคืออะไร 555+++ หางอึ่งเหมือนกัน เอาเป็นว่าเอาไว้ใช้งานให้ชีวิตมันง่านก็พอ
public static class Extensions
{
public static double IsNumeric(this string s)
{
foreach (char c in s)
{
if (!char.IsDigit(c) && c != '.')
{
return 0;
}
}
double result = double.Parse(s);
return result;
}
}
}
Date :
2015-11-17 17:05:55
By :
บัญดิษฐ
ลืมบอกว่าสามารถใช้ได้กับทุกตัวนะครับ อันนั้นแค่ตัวอย่าง
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB;IC
24/06/15 00:30:00;22.38;22.32;22.25;167;165;174
24/06/15 01:30:00;22.37;22.45;22.22;--;162;171
24/06/15 02:30:00;22.28;22.50;--;161;164;173
24/06/15 03:30:00;22.18;22.56;22.24;162;162;172
24/06/15 04:30:00;22.08;--;22.26;165;168;171
24/06/15 05:30:00;22.34;22.51;22.20;168;163;--
24/06/15 06:30:00;22.35;22.54;22.22;162;163;--
24/06/15 07:40:00;22.33;22.58;--;169;164;172
currentLog.Date_Time = strArray[0];//KV(AB)//Date Time
currentLog.KV_AB = strArray[1].IsNumeric();//KV(AB)
currentLog.kV_BC = strArray[2].IsNumeric();//kV(BC)
currentLog.kV_CA =strArray[3].IsNumeric();//kV(CA)
currentLog.IA = strArray[4].IsNumeric();//IA
currentLog.IB = strArray[5].IsNumeric();//IB
currentLog.IC = strArray[6].IsNumeric();//เขียน Extensions เพิ่มขึ้นมาว่าตรวจว่าเป็นตัวเลขหรือไหม IC
Date :
2015-11-17 17:11:53
By :
บัญดิษฐ
Date :
2015-11-17 21:39:21
By :
mr.win
พี่บัญดิษฐ แล้วถ้า IC ไม่มีละ
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB
24/06/15 00:30:00;22.38;22.32;22.25;167;165
24/06/15 01:30:00;22.37;22.45;22.22;--;162
24/06/15 02:30:00;22.28;22.50;--;161;164
24/06/15 03:30:00;22.18;22.56;22.24;162;162
24/06/15 04:30:00;22.08;--;22.26;165;168
24/06/15 05:30:00;22.34;22.51;22.20;168;163
24/06/15 06:30:00;22.35;22.54;22.22;162;163
24/06/15 07:40:00;22.33;22.58;--;169;164
จะเขียนเงื่อนไขยังไง เพราะ CODE จะ Error จะป้องกันยังไงค่ะ
Date :
2015-11-17 21:50:14
By :
Jirata
Code (C#)
currentLog.Date_Time = strArray[0];//KV(AB)//Date Time
currentLog.KV_AB = strArray[1].IsNumeric();//KV(AB)
currentLog.kV_BC = strArray[2].IsNumeric();//kV(BC)
currentLog.kV_CA =strArray[3].IsNumeric();//kV(CA)
currentLog.IA = strArray[4].IsNumeric();//IA
currentLog.IB = strArray[5].IsNumeric();//IB
//currentLog.IC = strArray[6].IsNumeric();//เขียน Extensions เพิ่มขึ้นมาว่าตรวจว่าเป็นตัวเลขหรือไหม IC
กรณีที่ไม่มี IC เราก็แค่ใส่ // หน้า currentLog.IC = strArray[6].IsNumeric();คือไม่ต้องอ่านเพราะจำนวน index จะลดลงเหลือแค่ 6
หรือไม่ก็ currentLog.IC =0; ไปเลย
หลักการทำงานของโปรแกรมตัวอย่างคือ
อ่านแถวของ Text file
ได้แถวมาแล้ว เก็บเข้าตัวแปล จากนั้นก็ตัดคำ (;)
string str;//ประกาศตัวตัวหนังสือเพื่อรับค่าจากแถว
string[] strArray;//ประกาษตัวแปลอาเรย์เพื่อรับค่าจากการตัดคำ ไม่ต้องกำหนดขนาดหรือมิติ
str = line; //รับค่าจากแถว xxx
strArray = str.Split(';');//strArray ตัวแปลอาเรย์รับค่าจากการตัดคำหรือแยกตามเครื่องหมาย (;) อันนี้แล้วแต่อาจจะมี , |
ก็จะได้ Array ตามจำนวน (;) index จะเริ่มจาก 0 เสมอ
ในนี้มี IC ก็จะเหลือจำนวนสมาชิกใน array แค่ 6 ก็จะได้ strArray[0] -> strArray[5]
ประมาณนี้ครับ ถ้าอธิบายไม่ถูกอย่างไงก็อย่าว่ากันนะครับผม
Date :
2015-11-18 08:28:32
By :
บัญดิษฐ
พี่บัญดิษฐค่ะ
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB
24/06/15 00:30:00;22.38;22.32;22.25;167;165
24/06/15 01:30:00;22.37;22.45;22.22;--;162
...
.
ถ้าเอา Date Time;KV(AB);kV(BC);kV(CA);IA;IB
เช็คได้ไหมค่ะ ขับว่า if (lineNum == 4) ว่ามีArrayกี่ตัว แล้วไปกำหนดที่ if (lineNum > 4) ว่าที่กี่Arrayได้หรือเปล่าค่ะ
if (lineNum == 4)
{
string name;
string[] nameArray;
name = line;
nameArray = name.Split(';');
for (int i = 0; i < nameArray.Length; i++)
{
Console.WriteLine("Array Index[{0}] = {1}", i, nameArray[i]);
}
Console.WriteLine("Array Length : {0}", nameArray.Length.ToString());
Console.ReadLine();
}
Date :
2015-11-18 10:12:05
By :
Jirata
ได้ครับ ว่าแต่ไม่ขอบอกได้ไหม มาถึงขั้นนี้แล้วคิดว่าน่าจะทำได้แล้วครับ อีกนิดเดียวเอง
เพราะมันไม่มีอะไรมากจริงๆ ครับ เช่น string[] strLine = line.Split(';');
strline.Length คิดว่าจะได้อะไรล่ะ มันก็จำนวนสมาชิกใน Array ก็เท่านั้นครับ
จากนั้นแล้วแต่เราจะไปให้งานอย่างไง ลองทำดูก่อนนะครับ
Date :
2015-11-18 14:05:12
By :
บัญดิษฐ
เด่วนะ พี่บัญดิษฐ ทำให้คิดอะไรมากขึ้นเลย...
ปัญหา 2 ก็ตามเลย
Date :
2015-11-18 22:50:42
By :
Jirata
ปัญหา 2 ได้แล้ว
เพิ่ม CODE
this.reportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);
this.reportViewer1.RefreshReport();
ที่ reportViewer1_Load (หน้าForm1) ใช่ป่ะ
Date :
2015-11-18 23:31:06
By :
Jirata
ใน DataSet จะไม่ถูกเพิ่มเข้ามา ถ้าต้องการเพิ่มเราก็ไปเพิ่มใน Class แล้วค่อยมากด Refresh หน้าออกแบบ report ครับ
จากนั้นแล้วแต่เราว่าจะอ่านมาเก็บจาก Index ที่เท่าไร บางครั้งไม่จำเป็นต้องมี Report เดียวก็ได้นะครับ กรณีที่ Text File นั้น
รูปแบบไม่คงที่ จะทำให้เกิด Error เสียเปล่ากรณีที่เราเผลอไปอ่าน index ที่ไม่มีจริง อันนี้ก็แล้วแต่นะเพราะมันไม่ใช่ทางออก
ที่ดี แต่สำหรับมือใหม่ก็ทำอย่างนี้ไปก่อนก็ได้ครับ
Date :
2015-11-19 09:42:43
By :
บัญดิษฐ
แล้วจะแก้ไงอ่ะ วิธีที่ดี ที่ไม่ทำให้เกิด Error ตึบเลย ***เราว่าจะอ่านมาเก็บจาก Index ที่เท่าไร คือ ?
พี่บัญดิษฐค่ะ พอค่า เป็น ลบ ก็ออก 0 เฉยเลยอ่ะ
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB
24/06/15 00:30:00;22.38;22.32;22.25;167;165
24/06/15 01:30:00;22.37;22.45;22.22;--;-162
...
.
public static class Extensions
{
public static double IsNumeric(this string s)
{
foreach (char c in s)
{
if (!char.IsDigit(c) && c != '.')
{
return 0;
}
}
double result = double.Parse(s);
return result;
}
}
Date :
2015-11-19 21:27:18
By :
Jirata
แก้ไขโค้ดตามนี้ครับ
Code (C#)
public static class Extensions
{
public static double IsNumeric(this string s)
{
double n;
bool isNumeric = double.TryParse(s, out n);
if(isNumeric)
{
return n;
}
return 0;
}
}
Date :
2015-11-20 08:25:29
By :
บัญดิษฐ
ตอบความคิดเห็นที่ : 29 เขียนโดย : Jirata เมื่อวันที่ 2015-11-19 21:27:18
รายละเอียดของการตอบ ::
อย่างที่แนะนำไปว่า ถ้า Text File ไม่ใช่มาตรฐานเดี่ยวคือแถวที่ 4 นั้น มีเพิ่มหรือลดขนาด
อย่างเช่น
Date Time;KV(AB);kV(BC);kV(CA);IA;IB = index ก็เท่ากับ [0,1,2,3,4,5]
แต่บอกมี THB เพิ่ม และต้องการอ่านด้วย
Date Time;KV(AB);kV(BC);kV(CA);IA;IB:THB = index ก็เท่ากับ [0,1,2,3,4,5,6]
และอีกวันไม่แล้ว ไม่มี THB และ IA IB แต่เพิ่ม IC แทน
Date Time;KV(AB);kV(BC);kV(CA);IC = index ก็เท่ากับ [0,1,2,3,4]
เห็นไหมจำนวนสมาชิกลดลง index ก็เปลี่ยนตาม แล้วโปรแกรมจะทำอย่างไงละ ?
อย่างนี้เราต้องเขียนเพิ่มหรือแยก module และ report ก็ต้องมากว่าหนึ่งหรือแยกแต่ละแบบ
หรือไม่ก็ต้องเขียนกราฟเอง เพราะถ้าทำรายงานเป็นแบบการออกแบบไว้ก่อนแล้วแค่แสดงข้อมูลอาจจะไม่ตรงโยชน์
เพราะข้อมูลมีหลายรูปแบบ คงเห็นภาพนะ
การเขียนโปรแกรมแบบวิธีที่ดีนั้น ไม่มีครับ มีแต่ใครคิด Algorithm ได้ดีกว่ากันเท่านั้นครับ
เพราะอาจเป็นที่ไม่ได้เรียนสายนี้โดยตรง ถ้าตอบผิดท่านอื่นสามารถเสริมและช่วยแก้ไขให้ถูกด้วยนะครับผม ขอบคุณครับ
ปล.
โปรแกรมไม่จำเป็นต้องมีหน้าเดียวแล้วreport ก็เหมือนกัน ให้ผู้ใช้เลือกว่าจะดูแบบไหนก็ดีเหมือนกัน
Date :
2015-11-20 10:02:40
By :
บัญดิษฐ
พี่บัญดิษฐค่ะ ทำไม add Dataset 2 ไป แล้วทำไมนำมาใช่ไม่ได้อ่ะ ขึ้น <<Expr>> จะนำ ตัวหนังสือบรรทัดที่ 1 กับ 2 มาใช่นะ
BANPUE
Load Report -22kv Outgoing No.3
Daily
Date Time;KV(AB);kV(BC);kV(CA);IA;IB
24/06/15 00:30:00;22.38;22.32;22.25;167;165
24/06/15 01:30:00;22.37;22.45;22.22;--;-162
...
.
Date :
2015-11-26 09:16:49
By :
Jirata
พี่บัญดิษฐค่ะ ทำมาถึงนี้แล้วก็ยังไม่ได้ แล้วตารางก็มี 0 ออกมา 2 บรรทัด
Code (C#)
namespace DailyReport
{
public class logmaster
{
//public string Station_name { get; set; }
//public string Bay_name { get; set; }
public string title_c { get; set; }
public string strLine { get; set; }
public List<logdetail> _logdetail { get; set; }
public static logmaster getLogmaster()
{
string[] lines = System.IO.File.ReadAllLines(@"D:\logTest.txt");
int lineNum = 0;
logmaster logM = new logmaster();
logM._logdetail = new List<logdetail>();
foreach (string line in lines)
{
lineNum++;
if (lineNum == 1)
{
//logM.Station_name = line;
//Console.WriteLine("\t" + logM.Station_name);
string[] StaArray;
StaArray = line.Split('\t');
logdetail Sta_name = new logdetail();
Sta_name.Station_name = StaArray[0];
logM._logdetail.Add(Sta_name);
}
if (lineNum == 2)
{
//logM.Bay_name = line;
//Console.WriteLine("\t" + logM.Bay_name);
string[] BayArray;
BayArray = line.Split('\t');
logdetail Ba_name = new logdetail();
Ba_name.Bay_name = BayArray[0];
logM._logdetail.Add(Ba_name);
}
if (lineNum == 3)
{
logM.title_c = line;
Console.WriteLine("\t" + logM.title_c);
}
if (lineNum == 4)
{
//string line;
string[] strLine = line.Split(';');
for (int i = 0; i < strLine.Length; i++)
{
Console.WriteLine("Array Index[{0}] = {1}", i, strLine[i]);
}
Console.WriteLine("Array Length : {0}", strLine.Length.ToString());
Console.ReadLine();
}
if (lineNum > 4)
{
string str;
string[] strArray;
str = line;
strArray = str.Split(';');
logdetail currentLog = new logdetail();
currentLog.Date_Time = strArray[0];
currentLog.kVab = strArray[1].IsNumeric();
currentLog.kVbc = strArray[2].IsNumeric();
currentLog.kVca = strArray[3].IsNumeric();
currentLog.Ia = strArray[4].IsNumeric();
currentLog.Ib = strArray[5].IsNumeric();
currentLog.Ic = strArray[6].IsNumeric();
currentLog.MW = strArray[7].IsNumeric();
currentLog.MVar = strArray[8].IsNumeric();
currentLog.PF = strArray[9].IsNumeric();
currentLog.THDiB = strArray[10].IsNumeric();
currentLog.THDvB = strArray[11].IsNumeric();
logM._logdetail.Add(currentLog);
}
}
return logM;
}
}
public class logdetail
{
public string Date_Time { get; set; }
public double kVab { get; set; }
public double kVbc { get; set; }
public double kVca { get; set; }
public double Ia { get; set; }
public double Ib { get; set; }
public double Ic { get; set; }
public double MW { get; set; }
public double MVar { get; set; }
public double PF { get; set; }
public double THDiB { get; set; }
public double THDvB { get; set; }
public string Station_name { get; set; }
public string Bay_name { get; set; }
}
public static class Extensions
{
public static double IsNumeric(this string s)
{
double n;
bool isNumeric = double.TryParse(s, out n);
if (isNumeric)
{
return n;
}
return 0;
}
}
}
Date :
2015-11-26 14:14:44
By :
Jirata
ลองดูข้อมูล TextFile บรรทัดก่อนวันที่ 24/06/15 ดูนะครับว่า ข้อมูลถูกต้องหรือเปล่า หรือว่าเป็นบัญหาที่ Report (ขนาดของ Report)
ลองตรวจดูก่อนนะครับผม ส่วนที่ว่า 2 DataSet ทำได้หรือยังครับ
Date :
2015-11-26 15:21:45
By :
บัญดิษฐ
ไม่ใช่ค่ะ ที่ข้อมูล TextFile บรรทัดก่อนวันที่ 24/06/15 ไม่มี แต่มันน่าจะเป็นเพราะ ทำ DataSet1 พอโปรแกรมอ่าน ก็เข้า if (lineNum == 1) และ if (lineNum == 2) พอมาถึง
if (isNumeric)
{
return n;
}
return 0;
พอมันไม่มีค่าก็เลย ให้เท่ากับ 0 อ่ะคะ แต่ไม่รู้จะแก้ยังไงเลย
Date :
2015-11-27 09:23:20
By :
Jirata
ถ้าเป็นไปได้ ขอ Text File ได้ไหมครับ ไม่ต้องเอามาทั้งหมดนะครับ เอาแค่ 100 row ก็พอครับ
[email protected]
Date :
2015-11-27 09:36:56
By :
บัญดิษฐ
ชื่อ logTest.txt ค่ะ
BANPUE
Load Report - 22 kV Outgoing No.3
Daily
DATE TIME;kV(AB);kV(BC);kV(CA);IA;IB;IC;MW;Mvar;%PF;%THDi(B);
24/06/15 00:30:00;22.38;22.58;22.25;167;165;174;6.26;1.72;96.39;1.1;
24/06/15 01:00:00;22.48;22.68;22.35;157;156;165;5.94;1.59;96.52;1.1;
24/06/15 01:30:00;22.43;22.61;22.28;149;148;157;5.64;1.46;96.77;0.1;
24/06/15 02:00:00;22.52;22.68;22.35;144;142;151;5.46;1.40;-96.81;0.0;
24/06/15 02:30:00;22.56;22.75;22.41;145;143;152;5.49;1.47;96.56;0.1;
24/06/15 03:00:00;22.60;22.78;22.48;141;139;148;5.34;1.45;96.47;0.1;
24/06/15 03:30:00;22.66;22.85;22.52;138;136;145;5.24;1.44;96.37;0.1;
24/06/15 04:00:00;22.71;22.90;22.56;135;134;--;5.15;1.46;96.19;0.5;
24/06/15 04:30:00;22.63;22.82;22.48;133;131;140;5.04;1.41;96.26;0.0;
24/06/15 05:00:00;22.56;22.75;22.41;130;128;137;4.93;1.38;96.29;0.0;
24/06/15 05:30:00;22.52;22.73;22.38;130;128;136;4.88;1.39;96.09;0.1;
24/06/15 06:00:00;22.40;22.58;22.24;136;133;141;5.03;1.53;95.60;0.1;
24/06/15 06:30:00;22.29;22.48;22.14;147;145;153;5.40;1.77;94.99;0.0;
24/06/15 07:00:00;22.36;22.58;22.26;145;144;149;5.35;1.68;95.36;0.1;
24/06/15 07:30:00;22.48;22.66;22.42;138;137;142;5.15;1.49;95.97;1.3;
24/06/15 08:00:00;22.49;22.65;22.43;137;137;142;5.12;1.58;-95.56;1.7;
24/06/15 08:30:00;22.52;22.66;22.45;132;133;137;4.94;1.60;95.07;2.0;
24/06/15 09:00:00;22.46;22.64;22.41;127;127;132;4.71;1.59;94.73;1.8;
24/06/15 09:30:00;22.26;22.36;22.20;140;140;145;5.11;1.80;94.25;1.7;
24/06/15 10:00:00;22.49;22.61;22.43;153;154;158;5.63;2.09;93.72;1.8;
24/06/15 10:30:00;22.66;22.80;22.62;154;155;159;5.70;2.14;93.57;1.6;
24/06/15 11:00:00;22.62;22.74;22.56;157;158;162;5.78;2.20;93.42;2.2;
24/06/15 11:30:00;22.56;22.68;22.52;160;162;166;5.91;2.24;93.48;2.5;
24/06/15 12:00:00;22.58;22.67;22.49;160;160;165;5.87;2.20;93.59;2.5;
24/06/15 12:30:00;22.59;22.69;22.52;156;157;161;5.74;2.15;93.57;2.5;
24/06/15 13:00:00;22.73;22.81;22.64;150;151;157;5.57;2.10;93.57;2.9;
24/06/15 13:30:00;22.65;22.75;22.56;142;143;147;5.30;1.78;94.72;3.2;
24/06/15 14:00:00;22.64;22.74;22.58;139;142;145;5.24;1.77;94.71;3.1;
24/06/15 14:30:00;22.54;22.58;22.45;146;148;153;5.47;1.86;94.66;2.9;
24/06/15 15:00:00;22.46;22.56;22.40;150;152;158;5.61;1.92;94.55;2.8;
24/06/15 15:30:00;22.41;22.52;22.37;151;152;158;5.60;1.89;94.67;3.0;
24/06/15 16:00:00;22.42;22.55;22.38;150;151;156;5.58;1.85;94.91;2.9;
24/06/15 16:30:00;22.46;22.56;22.42;151;152;157;5.62;1.87;94.83;2.7;
24/06/15 17:00:00;22.52;22.63;22.46;149;150;155;5.55;1.90;94.61;2.8;
24/06/15 17:30:00;22.62;22.76;22.60;148;151;153;5.55;1.93;94.38;2.9;
24/06/15 18:00:00;22.66;22.81;22.62;142;144;146;5.32;1.85;94.42;3.0;
24/06/15 18:30:00;22.47;22.61;22.44;136;137;140;5.07;1.64;95.08;2.6;
24/06/15 19:00:00;22.42;22.58;22.40;143;144;147;5.28;1.79;94.65;2.9;
24/06/15 19:30:00;22.31;22.49;22.27;152;152;157;5.53;2.02;93.92;2.3;
24/06/15 20:00:00;22.23;22.42;22.16;175;174;181;6.23;2.62;92.16;1.6;
24/06/15 20:30:00;22.40;22.61;22.27;204;200;211;7.16;3.34;90.61;1.7;
24/06/15 21:00:00;22.41;22.64;22.29;208;204;216;7.36;3.32;91.13;1.8;
24/06/15 21:30:00;22.55;22.75;22.43;217;215;226;7.83;3.37;91.84;2.0;
24/06/15 22:00:00;22.68;22.87;22.57;215;214;224;7.89;3.15;92.84;2.3;
24/06/15 22:30:00;22.69;22.88;22.58;209;208;218;7.76;2.82;93.97;2.5;
24/06/15 23:00:00;22.50;22.69;22.38;199;201;210;7.48;2.40;95.17;2.0;
24/06/15 23:30:00;22.48;22.65;22.38;190;190;199;7.14;2.17;95.62;1.8;
25/06/15 00:00:00;22.58;22.77;22.47;181;181;191;6.85;2.05;95.77;1.4;
Date :
2015-11-27 09:43:00
By :
Jirata
สร้าง class clsINI.cs แล้วก๊อบไปใส่ได้เลยครับ
Code (C#)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace TORServices
{
public static class clsINI
{
[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, global::System.Text.StringBuilder lpReturnedString, int nSize, string lpFileName);
[DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);
public static string ReadValue(string Path, string section, string key)
{
global::System.Text.StringBuilder sb = new global::System.Text.StringBuilder(255);
dynamic i = GetPrivateProfileString(section, key, "", sb, 255, Path);
return sb.ToString();
}
public static void WriteValue(string Path, string section, string key, string value) { WritePrivateProfileString(section, key, value, Path); }
public static string textFileReader(string pathFileName)
{
string line;
StreamReader fs;
try
{
fs = new StreamReader(pathFileName);
line = fs.ReadToEnd();
/* อ่าน Encode จาก String ที่อ่านมาได้จาก text file */
Encoding encodeSource = Encoding.GetEncoding(fs.CurrentEncoding.CodePage);
fs.Close();
//* ............ */
Encoding systemEncode = Encoding.Default;
Encoding targetEncode = encodeSource;
/* สั่ง getbyte array จาก string ที่เราอ่านมา */
byte[] srcData = systemEncode.GetBytes( line );
byte[] dstData;
/* ถ้าเป้น Encode ต่างกัน windows และ text file ให้ Convert byte array ไปเป็น text file encode */
if( targetEncode != systemEncode )
dstData = Encoding.Convert( systemEncode, targetEncode, srcData );
else
dstData = srcData;
/* convert bytearray ไปเป็น string ด้วย text file encode */
return targetEncode.GetString(dstData);
}
catch(Exception ex)
{
throw new IOException("cannot find " + pathFileName,ex);
}
}
public static System.Collections.Generic.List<string> textFileReaderFormline(string pathFileName)
{
System.Collections.Generic.List<string> list = new System.Collections.Generic.List<string>();
System.IO.StreamReader fs;
fs = new System.IO.StreamReader(pathFileName, System.Text.Encoding.GetEncoding(874));
string line;
while ((line = fs.ReadLine()) != null)
{
list.Add(line);
}
return list;
}
}
}
Date :
2015-12-25 08:15:00
By :
lamaka.tor
ขอบคุณค่ะ พี่บัญดิษฐ และคุณTOR_CHEMISTRY
ของพี่บัญดิษฐ มีให้เลือกเยอะ แต่ก็ งง เหมือนกัน เด่วจะลองเอาไปดัดแปลงดูนะ
Date :
2015-12-27 21:59:28
By :
Jirata
พี่ๆ ช่วยหน่อยค่ะ
ติดปัญหาอีกละ ทำไม เขียน code แบบนี้ แล้วมันไปหาไฟล์ไม่เจออ่ะ
string path = Application.StartupPath + @"D:\SIPC.ini";
Date :
2015-12-28 00:03:24
By :
Jirata
string path = Application.StartupPath + @"D:\SIPC.ini";
เป็น
string path = Application.StartupPath + @"\SIPC.ini";
หรือ
string path = @"D:\SIPC.ini";
เลือกเอาซักอย่างหนึ่งครับ
ไม่งั้นมันจะเป็นประมาณแบบนี้
"G:\TestCSharp\MIDI_System\FileMng\bin\DebugD:\SIPC.ini"
//Application.StartupPath = G:\TestCSharp\MIDI_System\FileMng\bin\Debug
Date :
2015-12-28 08:08:45
By :
lamaka.tor
ได้แล้วๆๆๆๆ ขอบคุณค่ะ คุณTOR_CHEMISTRY หาวิธีตั้งนานเลย เล่นไปตี3กว่า
Code (C#)
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.IO;
using Ini;
namespace DailyReport
{
public class logmaster
{
public string Station_name { get; set; }
public string Bay_name { get; set; }
public string graph_name { get; set; }
public List<logdetail> _logdetail { get; set; }
String path = @"C:\SIPC\SIPC.INI";
public static logmaster getLogmaster()
{
IniFile ini = new IniFile(path); // ติดตรงนี้ค่ะ line 32
string PatInstalac = ini.IniReadValue("Paths", "PatInstalac").ToString();
string Instalacion = ini.IniReadValue("Parametros Activos", "Instalacion").ToString();
DateTime newdate = DateTime.Today;
string resultdate = newdate.ToString("yyyyMMdd");
string SumText = (PatInstalac + @"\" + Instalacion + @"\LOAD\DAILY\" + resultdate + @".TXT");
FileInfo fi = new FileInfo(SumText);
if (fi.Exists)
{
string[] lines = System.IO.File.ReadAllLines(SumText);
int lineNum = 0;
logmaster logM = new logmaster();
logM._logdetail = new List<logdetail>();
foreach (string line in lines)
{
lineNum++;
if (lineNum == 1)
{
logM.Station_name = line;
Console.WriteLine("\t" + logM.Station_name);
}
if (lineNum == 2)
{
logM.Bay_name = line;
Console.WriteLine("\t" + logM.Bay_name);
}
if (lineNum == 3)
{
logM.graph_name = line;
Console.WriteLine("\t" + logM.graph_name);
}
if (lineNum > 4)
{
string str;
string[] strArray;
str = line;
strArray = str.Split(';');
logdetail currentLog = new logdetail();
currentLog.Date_Time = strArray[0];
currentLog.Vab = strArray[1].IsNumeric();
currentLog.Vbc = strArray[2].IsNumeric();
currentLog.Vca = strArray[3].IsNumeric();
currentLog.Ia = strArray[4].IsNumeric();
currentLog.Ib = strArray[5].IsNumeric();
currentLog.Ic = strArray[6].IsNumeric();
currentLog.MW = strArray[7].IsNumeric();
currentLog.MVar = strArray[8].IsNumeric();
currentLog.PF = strArray[9].IsNumeric();
currentLog.THDiB = strArray[10].IsNumeric();
currentLog.THDvB = strArray[11].IsNumeric();
logM._logdetail.Add(currentLog);
}
}
return logM;
}
else
{
System.Windows.Forms.MessageBox.Show("No such file " + SumText);
//this.Close();
}
}
}
public class logdetail
{
public string Date_Time { get; set; }
public double Vab { get; set; }
public double Vbc { get; set; }
public double Vca { get; set; }
public double Ia { get; set; }
public double Ib { get; set; }
public double Ic { get; set; }
public double MW { get; set; }
public double MVar { get; set; }
public double PF { get; set; }
public double THDiB { get; set; }
public double THDvB { get; set; }
}
public static class Extensions
{
public static double IsNumeric(this string s)
{
double n;
bool isNumeric = double.TryParse(s, out n);
if (isNumeric)
{
return n;
}
return 0;
}
}
}
Date :
2015-12-28 14:23:56
By :
Jirata
String path = @"C:\SIPC\SIPC.INI";
public static logmaster getLogmaster()
เมื่อเราเรียกใช้งานแบบ static ทุกอย่าง(รึป่าวหว่า) ที่ method นั้นๆ อ้างถึงต้องเป็น static เช่นกันครับ
public static String path = @"C:\SIPC\SIPC.INI";
เรียบร้อยครับ
Date :
2015-12-28 14:43:51
By :
lamaka.tor
ไม่ได้ค่ะ กายเป็น Error บรรทัดที่ 29 แทน
Date :
2015-12-28 15:05:19
By :
Jirata
public class logmaster
public static logmaster getLogmaster()
มันขัดแย้งกันอยู่ในตัวครับ
ลองย้อนกลับไปดูว่า
ที่จริงแล้วต้องการสร้าง class แบบ public หรือ public static ค่อยโยงลงมาที่ method ใน class อีกที
จะดีกว่าไม๊ครับ
Date :
2015-12-28 15:53:28
By :
lamaka.tor
ไม่มี Error แล้วค่ะ แต่ไม่มีอะไรออกมากเลย ไม่รู้เข้าใจถูกรึเปล่าค่ะ
ในความคิดตอนนี้ พอ run โปรแกรมจะทำ Form2 ก่อนแล้วค่อยส่งค่าที่อยู่ข้อมูลไปให้ Form1 เพื่อทำกราฟ แต่ถ้า Form2 เข้า loop else จะจบโปรแกรม แล้วไม่ไป run Form1 ใช่รึเปล่าค่ะ งงเลย ตอนนี้ ??????
Date :
2015-12-29 02:02:53
By :
Jirata
ทำได้แล้วค่ะ ลืมไปดูที่ Run(new Form2());
Date :
2015-12-29 10:29:06
By :
Jirata
พี่ค่ะ ช่วยด้วยๆ งง ตรงข้ามหน้าอ่ะ
คือ หน้า templog.cs
Code (C#)
if (lineNum == 4)
{
string[] strLine = line.Split(';');
for (int i = 0; i < strLine.Length; i++)
{
Console.WriteLine("", i, strLine[i]);
}
//MessageBox.Show(strLine.Length.ToString());
DailyReport.Form1.logReport.selectReport = strLine.Length.ToString();
}
จะให้ส่งไปหน้า Form1.Designer.cs
Code (C#)
public static class logReport
{
public static string selectReport = string.Empty;
}
private void InitializeComponent()
{
if (selectReport == "12")
{
this.reportViewer1.LocalReport.ReportEmbeddedResource = "DailyReport.Report2.rdlc";
}
else
{
this.reportViewer1.LocalReport.ReportEmbeddedResource = "DailyReport.Report1.rdlc";
}
}
#endregion
public string selectReport { get; set; }
คือมันออกแต่ else อ่ะค่ะ
Date :
2016-01-04 10:16:13
By :
Jirata
ลืมบอกไปค่ะ ว่าทำได้แล้ว
Date :
2016-01-04 20:21:02
By :
Jirata
พี่บัญดิษฐ & lamaka.tor ช่วยด้วยค่ะ
ถ้าเป็นข้อมูลอย่างนี่จะ loop ยังไงดีค่ะ ข้อมูลอยู่ใน textfile มีประมาณ 60000+ /3เดือน เลยไม่รู้จะเก็บข้อมูลยังไงดีค่ะ ใจก็ว่าจะเก็บใน MySQL แต่ก็กลัวมีอะไรที่ดีกว่าหรือง่ายกว่า ท่านใดรู้บ้างคะ
*05/09/15 21:01:08.280 115kV SMC Line4 AUTO RECLOSE LOCK OUT (MAIN1) LOCKOUT
05/09/15 21:00:58.237 115kV SMC Line4 DISTANCE PHASE N (MAIN 1) TRIP
05/09/15 21:00:58.237 115kV SMC Line4 DISTANCE PHASE B (MAIN 1) TRIP
05/09/15 21:00:58.237 115kV SMC Line4 DISTANCE ZONE 2 (MAIN 1) TRIP
05/09/15 21:00:58.258 115kV SMC Line4 DISTANCE PHASE N (MAIN 1) NORMAL
05/09/15 21:00:58.258 115kV SMC Line4 DISTANCE PHASE B (MAIN 1) NORMAL
05/09/15 21:00:58.258 115kV SMC Line4 DISTANCE ZONE 2 (MAIN 1) NORMAL
*05/09/15 21:01:55 115kV SMC Line4 VOLTAGE C-A UND
*05/09/15 21:01:55 115kV SMC Line4 VOLTAGE B-C UND
*05/09/15 21:01:55 115kV SMC Line4 VOLTAGE A-B UND
https://onedrive.live.com/redir?resid=B53AD5381DE710E7!219&authkey=!AFRvCBxCQUSpL5Y&ithint=file%2cTXT
Date :
2016-01-19 09:19:53
By :
Jirata
*05/09/15 21:01:08.280 115kV SMC Line4 AUTO RECLOSE LOCK OUT (MAIN1) LOCKOUT
*05/09/15 21:01:55 115kV SMC Line4 VOLTAGE C-A UND
อ่อป่าวค่ะ จะแยกเป็น
EDATE=>05/09/15 21:01:08
ETIME=>280
ENAME=>115kV SMC Line4
EDES=>AUTO RECLOSE LOCK OUT (MAIN1)
ESTATUS=>LOCKOUT
EOTHER=>
และ
EDATE=>05/09/15 21:01:55
ETIME=>
ENAME=>115kV SMC Line4
EDES=>VOLTAGE C-A
ESTATUS=>
EOTHER=>UND
อะค่ะ ข้อมูลจะเป็นประมาณนี้อ่ะคะ
Date :
2016-01-19 18:59:36
By :
Jirata
Code (C#)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string filetxt = @"C:\EVENTOS_2.TXT";
string strRegex = @"(?:([0-9][0-9]/[0-9][0-9]/[0-9][0-9]\s[0-9][0-9]:[0-9][0-9]:[0-9][0-9])[\s|\.]([\s|0-9]{3})\s{1,}(115kV SMC Line\d)\s{2,}(.*?)\s{5,}(\w+))";
private void Form1_Load(object sender, EventArgs e)
{
System.Text.RegularExpressions.Regex RgxLines = new System.Text.RegularExpressions.Regex(strRegex);
foreach (System.Text.RegularExpressions.Match match in RgxLines.Matches(System.IO.File.ReadAllText(filetxt)))
{
if (match.Groups[2].Value.Trim().Length > 0)
{
dataGridView1.Rows.Add(match.Groups[1].Value, match.Groups[2].Value, match.Groups[3].Value, match.Groups[4].Value, match.Groups[5].Value, "");
}
else
{
dataGridView1.Rows.Add(match.Groups[1].Value, match.Groups[2].Value, match.Groups[3].Value, match.Groups[4].Value,"", match.Groups[5].Value);
}
}
}
}
นี่ที่ได้จาก http://regexhero.net/tester/
ครับ
เมื่อเราโค้ดมาลงใน C# ก็ออกมาเป็นแบบนี้
****ต้องขอโทษด้วยครับที่ใช้ regex ตอนนี้ผมหัดใช้ regex อยู่ทุกอย่างที่ผมทำจึงต้องให้เป็น regex
แต่มันก็ง่ายดีนะครับ
อธิบาย
@"(?:([0-9][0-9]/[0-9][0-9]/[0-9][0-9]\s[0-9][0-9]:[0-9][0-9]:[0-9][0-9])[\s|\.]([\s|0-9]{3})\s{1,}(115kV SMC Line\d)\s{2,}(.*?)\s{5,}(\w+))"
จะจัดกลุ่มให้ได้ 1 กลุ่มตามรูปแบบนี้โดยชข้างในจะมี 5 กลุ่ม
*05/09/15 20:58:41.910 115kV SMC Line4 AUTO RECLOSE LOCK OUT (MAIN1) LOCKOUT
*05/09/15 20:59:09 115kV SMC Line1 VOLTAGE C-A UND
กลุ่ม 1 ([0-9][0-9]/[0-9][0-9]/[0-9][0-9]\s[0-9][0-9]:[0-9][0-9]:[0-9][0-9]) => 05/09/15 20:58:41/05/09/15 20:59:09
กลุ่ม 2 ([\s|0-9]{3}) => ช่องว่าง/910
กลุ่ม 3 (115kV SMC Line\d) => 115kV SMC Line ตามด้วย จำนวนเต็ม **ไม่ชอบเปลี่ยนได้ครับ
กลุ่ม 4 ([A-Z0-9\s{1})(]+) => AUTO RECLOSE LOCK OUT (MAIN1)/VOLTAGE C-A
กลุ่ม 5 (\w+) => LOCKOUT/UND
ความจริงต้องให้ได้ 6 กลุ่มเพราะ LOCKOUTและ UND อยู่คนละกลุ่ม
แต่ผมแก้โดย
dataGridView1.Rows.Add(match.Groups[1].Value, match.Groups[2].Value, match.Groups[3].Value, match.Groups[4].Value, match.Groups[5].Value, "");
}
else
{
dataGridView1.Rows.Add(match.Groups[1].Value, match.Groups[2].Value, match.Groups[3].Value, match.Groups[4].Value,"", match.Groups[5].Value);
วิธีบ้านๆของผมก็มีแค่นี้ครับ
ส่วนอยากแก้ไขตรงไหนก็ลองๆแก้ดูครับ
Date :
2016-01-20 10:57:07
By :
lamaka.tor
555 ขอยอมแพ้คุณ TOR เลยงานนี้ เพราะผมยังไม่เข้าใจ การใช้งาน regex เลย
แบบว่าถ้าถามตอนนี้ว่าเข้าใจระดับไหนแล้ว ก็คงต้องตอบว่า 0 ครับ
อย่างไงก็ขอบคุณมากเลยครับ ที่อธิบายอย่างละเอียด "สังคมต้องการคนแบบนี้"
เดียวจะลองเอาไปใช้ดูบาง ส่วนมากผมจะ Split เอา
Date :
2016-01-20 11:13:25
By :
บัญดิษฐ
หาาาาพี่บัญดิษฐ ยังไม่เข้าใจ แล้วจะเข้าใจด้วยรึเปล่านะ T_T แต่ก็จะพยายามนะ ขอบคุณพี่ๆมากที่ช่วยแนะนำ
Date :
2016-01-20 22:45:32
By :
Jirata
พี่ค่ะ ไม่เข้าใจเลยค่ะ
\s{1,} => เว้นวรรค 1 ทีหรอค่ะ
(115kV SMC Line\d) => \d จะเปลี่ยนแต่ตัวเลขแต่มันมีหลายชื่ออ่ะ
115kV SMC BUSTIE1
115kV SMC BUSTIE2
CPM
SMC COMMON
115kV SMC Line1-8
Communication PROCOME
\s{2,} => เว้นวรรค 2 ทีหรอค่ะ
(.*?) => คืออะไรหรอค่ะ
\s{5,} => เว้นวรรค ถ ทีหรอค่ะ
(\w+) => คืออะไรหรอค่ะ
มันไม่เห็นออกเหมือนพี่เลยค่ะ เป็นเพราะกลุ่มที่ 3 รึเปล่า
Date :
2016-01-26 08:14:40
By :
Jirata
https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex%28v=vs.110%29.aspx
http://www.webub.com/PHP_Regular_Expressions_Regular_Expression-69-10.html
http://www.ninenik.com/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99_character_classes_%E0%B9%83%E0%B8%99_Regular_Expressions_%E0%B8%82%E0%B8%AD%E0%B8%87_PHP-396.html
http://www.thaimisc.com/r/view.php?id=402&category=16
แปลกแต่จริงที่ regex C# ภาษาไทยมีน้อยมากๆๆ ส่วนใหญ่ไปกองกันอยู่ใน PHP,JAVA กัน
แต่ผมก็มีทางออกมาให้อีกแล้วครับ(เปลี่ยนไปเรือยๆจนกว่าจะหาทางกลับมาจุดเริ่มต้นไม่เจอ 5555)
มาคราวนี้ใช้วิธีนับแบบบ้านๆ ครับ
รูปแบบคือ
*05/09/15 20:58:41.910 115kV SMC Line4 AUTO RECLOSE LOCK OUT (MAIN1) LOCKOUT
1(*)/17(05/09/15 20:58:41)/1(.)/4(910 )/21(115kV SMC Line4 )/41(AUTO RECLOSE LOCK OUT (MAIN1) )/16(LOCKOUT )/3( )
1+17+1+4+21+41+16+3 = 104 พอดีเป๊ะๆครับ
Code (C#)
public partial class Form1 : Form
{
DataGridView dataGridView1 = new DataGridView() {Dock = System.Windows.Forms.DockStyle.Fill,Name = "dataGridView1" };
DataGridViewTextBoxColumn Column1 = new DataGridViewTextBoxColumn() { HeaderText = "Line", Name = "Column1", Width = 200 };
DataGridViewTextBoxColumn Column2 = new DataGridViewTextBoxColumn() { HeaderText = "EDATE", Name = "Column2" };
DataGridViewTextBoxColumn Column3 = new DataGridViewTextBoxColumn() { HeaderText = "ETIME", Name = "Column3" };
DataGridViewTextBoxColumn Column4 = new DataGridViewTextBoxColumn() { HeaderText = "ENAME", Name = "Column4" };
DataGridViewTextBoxColumn Column5 = new DataGridViewTextBoxColumn() { HeaderText = "EDES", Name = "Column5" };
DataGridViewTextBoxColumn Column6 = new DataGridViewTextBoxColumn() { HeaderText = "ESTATUS", Name = "Column6" };
DataGridViewTextBoxColumn Column7 = new DataGridViewTextBoxColumn() { HeaderText = "EOTHER", Name = "Column7" };
public Form1()
{
InitializeComponent();
this.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {Column1,Column2,Column3,Column4,Column5,Column6,Column7});
this.Controls.Add(this.dataGridView1);
((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
this.ResumeLayout(false);
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (string line in System.IO.File.ReadAllLines(@"C:\EVENTOS_2.TXT"))
{
if (line.Length >= 104)
dataGridView1.Rows.Add(line,
line.Substring(1, 17).Trim(),
line.Substring(19, 4).Trim(),
line.Substring(23, 21).Trim(),
line.Substring(44, 41).Trim(),
line.Substring(85, 16).Trim(),
line.Substring(101, 3).Trim());
}
}
}
แต่ว่าช้ามากเลย
เอาเป็นว่าถ้าผมหา regex ที่เร็วกว่านี้จะเอามานำเน๋อใหม่นะครับ
Date :
2016-01-26 10:41:18
By :
lamaka.tor
ตัด
if (line.Length >= 104)
ออกก็ได้ครับ
ไม่ต่างกัน
Date :
2016-01-26 11:13:54
By :
lamaka.tor
พี่ค่ะ จะอัพขึ้น mySQL ยังไงดีค่ะ
ที filetext มีจำนวน 37 บรรทัด และจะเพิ่มขึ้นเรื่อยๆ
ที่ mySQL มีจำนวนแค่ 3 บรรทัดของ filetext ตามรูปค่ะ ไม่รู้จะเขียนเงื่อนไข ยังไงค่ะ ให้ไปอ่าน ทุกๆ 1s.
Code (SQL)
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jan 28, 2016 at 02:25 PM
-- Server version: 5.0.51
-- PHP Version: 5.2.6
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `cscs`
--
-- --------------------------------------------------------
--
-- Table structure for table `eventos`
--
CREATE TABLE `eventos` (
`ID` int(15) NOT NULL auto_increment,
`EDATE` datetime NOT NULL,
`ETIME` varchar(3) NOT NULL default '000',
`ENAME` varchar(20) NOT NULL,
`EDES` varchar(40) NOT NULL,
`ESTATUS` varchar(15) NOT NULL,
`EOTHER` varchar(3) NOT NULL,
KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- Dumping data for table `eventos`
--
INSERT INTO `eventos` VALUES (1, '2015-10-28 13:53:12', '000', '115kV SMC Line1', '01YB-01 STATUS', 'CLOSE BYPASS', '');
INSERT INTO `eventos` VALUES (2, '2015-10-28 13:53:12', '226', '115kV SMC Line1', '01YB-01 CLOSE BYPASS COMMAND', 'FROM CSCS', '');
INSERT INTO `eventos` VALUES (3, '2015-10-28 13:53:39', '000', '115kV SMC Line2', '02YB-01 STATUS', 'CLOSE BYPASS', '');
Date :
2016-01-28 14:30:31
By :
Jirata
เป็นผมนี่ for loop Insert แบบบ้านๆ แบบบ้านๆเลยครับ
เพราะตัว filetext เอง ก็สามารถเอามาทำเป็น list ได้อยู่แล้ว
แต่ถ้า 1s นี่อย่างเร็วเลยนะครับ
ถ้าเจอจังหวะเครื่องไหนอืดๆนี่ถือว่างานเข้าเลยก็ว่าได้
ลองโยนให้ thread จัดการครับ
thread แรก ทำงานไป thread ที่ 2 ก็ทำงานต่อได้
แต่ database จะไม่เรียงกันครับ
Date :
2016-01-28 15:16:42
By :
lamaka.tor
ว่าแต่ Data ขนาดนี้ ตัว Mysql จะรับไว้เหรอครับผม ไม่ลองดูวิธีอื่นดูก่อนลองคิดดูนะว่าแต่ละวันข้อมูลทั้งหมดกี่บรรทัดใน Text File
มันก็เท่ากับเรา Insert records เท่ากับจำนวนนั้น ไม่อย่างนั้นจะทำให้ทำงานช้าไปอีกนะ ไม่ลองศึกษาพวก NoSQL
ดูครับ มันน่าจะสนับสนุนทางนี้มากกว่านะครับผม
รอท่านอื่นด้วยนะครับ อาจจะมีบางท่านที่ใช้ mysql ที่ทำงานหนักๆอย่างนี้ก็ได้ครับ
Date :
2016-01-28 16:03:53
By :
บัญดิษฐ
พี่ค่ะ ช่วยด้วยค่ะ ติดปัญหาอ่ะ เอา bb ออกมาใช้ไม่ได้
มันข้ามลูป if ไม่ได้
Code (C#)
string[] lines = System.IO.File.ReadAllLines(SumIniFile);
int lineNum = 0;
foreach (string line in lines)
{
lineNum++;
if (lineNum == 1)
{
string[] aa = line.Split(' ');
int bb = Int32.Parse(aa[7]);
System.Windows.Forms.MessageBox.Show(" " + bb, "OK ");
}
if(lineNum == bb)
{
if (line.Length >= AlaEnd)
dataGridView1.Rows.Add(
line.Substring(1, 17).Trim(),
line.Substring(19, 3).Trim(),
line.Substring(Name, CENAME).Trim(),
line.Substring(Des, CDes).Trim(),
line.Substring(Sta, CSta).Trim(),
line.Substring(Ala, 3).Trim());
}
}
ประวัติการแก้ไข 2016-01-29 21:59:06 2016-01-29 22:00:04
Date :
2016-01-29 21:38:36
By :
Jirata
อ่านจาก #NO0 - #NO66
ขำดี และยกตัวอย่าง่ายฯ (Algorithm)
37 มันเข้ามันออกมันเข้ามันออก
คำอธิบายง่ายฯ มันเข้ามันออกมันออกมันเข้า
--- จะรู้ได้อย่างไรว่ามันออกไปวันไหน (ที่คุณต้องการ) ?
------- ก็ดูวันเข้า
--- จะรู้ได้อย่างไรว่ามันเข้าวันไหน(ที่คุณต้องการ) ?
------- ก็ดูวันออก
ตายห่าเลย Algorithm การคิดของ วิศวะ/เคมี/etc...
Date :
2016-01-29 22:34:24
By :
หน้าฮี
string str = lines[lines.Leangh-1];
ใช่ที่ต้องการป่าวครับ
Date :
2016-01-29 22:45:44
By :
lamaka.tor
พี่ค่ะ ถ้าจะ run โปรแกรมแล้ว ตั้งเวลาให้วิ่งอ่าน ซ้ำๆเหมือนเดิมยังไงค่ะ
ประวัติการแก้ไข 2016-01-30 11:58:21
Date :
2016-01-29 23:14:16
By :
Jirata
ผมไม่แน่ใจว่าเข้าใจถูกไม๊นะครับ
ถ้าหาก database จากตอนแรก มี 37 แถว พออีกซัก 1 นาที มันก็จะเพิ่มขึ้น
สมมติให้เพิ่มเป็น 500 ละกัน
แบบนั้นเราสามารถเก็บรายชื่อไฟล์ กับ log ล่าสุดไว้ใช้งานได้ครับประมาณว่า
void Refresh(string file,Int Lastlog)
{
ร่ายยาวไปครับ
เสร็จแล้วก็ Insert file Lastlog ตัวใหม่(500)
}
แบบนี้เราก็เก็บได้เรื่อยๆแล้วครับ
แต่ถ้าเป็นคนละไฟล์ แนะนำให้ ใช้ thread หรืออะไรที่ทำงานเบื้องหลัง
ส่วนเบื้องหน้าก็มีหน้าที่ อ่าน แล้ว เอามาประมวลผลก็จะเร็วขึ้นครับ
อย่างอาจจะเขียนเป็น consoleApp หรือ winServices ก็ได้ครับ
Date :
2016-01-30 16:12:37
By :
lamaka.tor
ค่ะ กำลังทำอยู่พอดีค่ะ ใช้ win Services แต่ก็ติด ติด ไม่รู้ว่า ติดที่ไหน T_T !!! เพราะทำตาม youtube ไป
https://www.youtube.com/watch?v=EwTYYPRcWj0
งง ตรงจะเอาcode ไปใส่ ไม่รู้จะใส่หน้าไหน ?
พอเพิ่ม System.Windows.Forms.Application.Run(); เข้าไป ก็เก็บDB ได้ แต่กลับ stop ไม่ได้ ไป Uninstall ออก ก็ไม่ออก ต้องไปลบที่ regedit แทน
พี่ lamaka.tor แนะนำด้วยค่ะ
ProjectInstaller.cs
Service1.cs
Code (C#) Service1.cs
public Service1()
{
//timer1.Interval = 1000;
//timer1.Start();
InitializeComponent();
//System.Windows.Forms.Application.Run();
}
public void OnDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
timer1.Interval = 1000;
timer1.Start();
//System.Diagnostics.Process.Start(@"C:\SIPC\EJEC\MASTER.EXE");
System.Windows.Forms.Application.Run();
string sFile = @"C:\SIPC\EJEC\OnOffService.TXT";
string sDate = DateTime.Now.ToString();
System.IO.StreamWriter oFile = new System.IO.StreamWriter(sFile, true);
oFile.WriteLine("On " + sDate + "\n");
oFile.Close();
//Process notePad = new Process();
//notePad.StartInfo.FileName = "notepad.exe";
////notePad.StartInfo.Arguments = "ProcessStart.cs";
//notePad.Start();
////System.Windows.Forms.MessageBox.Show("Start : OK", "KK ");
//System.Diagnostics.Process.Start(@"C:\SIPC\EJEC\MASTER.EXE");
////this.Stop();
}
ประวัติการแก้ไข 2016-02-01 21:05:06 2016-02-02 00:33:05
Date :
2016-02-01 21:01:40
By :
Jirata
พี่ค่ะ ช่วยด้วยคะ
เพื่อ กดขั้นตอนที่ 2 แล้ว จะให้ form1 โหลดใหม่โดยเอา ค่าจาก form2 ไป Query แล้วไปให้ form1 โดยที่ไม่ new Form1().ShowDialog();
Date :
2016-02-17 14:55:42
By :
Jirata
Load balance : Server 03