PDA

View Full Version : سوال: اضافه کردن در datagiridview بصورت سطر به سطر و ستون به ستون از فایل متنی



Rain_Saeid
چهارشنبه 30 تیر 1395, 10:31 صبح
سلام
دوستان عزیز ی فایل متنی دارم که حدود 5 تا ستون و 20 خط هست
مانند نوشته زیر:

xxx1 0600000 0000000000 2 g:\skhd

ccc2 000080000 000000 2 d:\skldhf

vvv2 000080000 000080000 2 c:\hksajshj

fff3 000300000 0000100000 2 c:\dkjf

میخوام با دستور این هارو تو سطر و ستون گزینه datagiridview بزارم

ممنون میشم راهنمایی بفرمایید

gilsoft
چهارشنبه 30 تیر 1395, 12:32 عصر
سلام
دوستان عزیز ی فایل متنی دارم که حدود 5 تا ستون و 20 خط هست
مانند نوشته زیر:

xxx1 0600000 0000000000 2 g:\skhd

ccc2 000080000 000000 2 d:\skldhf

vvv2 000080000 000080000 2 c:\hksajshj

fff3 000300000 0000100000 2 c:\dkjf

میخوام با دستور این هارو تو سطر و ستون گزینه datagiridview بزارم

ممنون میشم راهنمایی بفرمایید

سلام دوست عزیز

اینم کد مربوطه:
Dim TextLine As String = ""
Dim SplitLine() As String
Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txtFile.txt")
Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SplitLine = Split(TextLine, " ")
DataGridView1.Rows.Add(SplitLine)
Loop

روش دوم:
Dim TextLine As String = ""
Dim SplitLine() As String

Dim FirstLoop As Boolean = True

Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txtFile.txt")

Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()
SplitLine = Split(TextLine, " ")

If FirstLoop = True Then
Dim NC As Integer = SplitLine.GetUpperBound(0)
Dim cl As DataGridViewTextBoxColumn
For i As Integer = 0 To NC
cl = New DataGridViewTextBoxColumn
With cl
.HeaderText = "Column" & CStr(i + 1)
Name = "Column" & CStr(i + 1)
.Width = 90
.ReadOnly = True
End With
DataGridView1.Columns.Add(cl)
Next
FirstLoop = False
End If

DataGridView1.Rows.Add(SplitLine)
Loop
objReader.Close() : objReader.Dispose()

موفق باشید .....

Rain_Saeid
چهارشنبه 30 تیر 1395, 16:54 عصر
تشکر از شما استاد گرامی

روی چند سطر جواب داد

ولی روی همش جواب نداد

منظور اینکه ستون اول از متن ، بعضی از کلمه ها سه حرفی یا 4 حرفی یا .. هستن و با ستون جلویی فاصله شون متفاوت هست

gilsoft
چهارشنبه 30 تیر 1395, 18:53 عصر
تشکر از شما استاد گرامی

روی چند سطر جواب داد

ولی روی همش جواب نداد

منظور اینکه ستون اول از متن ، بعضی از کلمه ها سه حرفی یا 4 حرفی یا .. هستن و با ستون جلویی فاصله شون متفاوت هست

سلام مجدد
TextLine = objReader.ReadLine()
کد فوق وظیفه‌اش خواندن یک سطر از فایل متنی ( Text File ) هست .. منظور از یک سطر اینه که: انتهای آن با Cr/Lf (یعنی Chr(10) + Chr(13)) یا همون VbCrLf تموم شده باشه

بنابراین اون سطرهایی که مشکل دارند رو باید چک کنی

و اما کذ زیر
SplitLine = Split(TextLine, " ")
کاراکتر فاصله ( یعتی Chr(32) ) رو به عنوان جداکننده‌ی ستون‌ها تعریف می‌کنه .. که اونم باید در فایل متنی ( Text File ) چک کنی و ببینی آیا مابین رشته‌ها فاصله وجود داره .. یا از کاراکتر دیگه‌ای به عنوان جداکننده استفاده شده ( مثلا کاراکتر TAB یعنی Chr(9) ) یا همون vbTab

بازم اگه مشکلی بود .. من در خدمتم .....

موفق باشید .....

Rain_Saeid
چهارشنبه 30 تیر 1395, 19:22 عصر
بازهم تشکر

فقط مشکل اینجاس که مثلا :

ali 25 2225 2 c:\jksj
esmaeel 22 2222 2 c:\sss

منظور اینجاست که فاصله ای که بین ali تا 25 هست، 5 تا space هست
فاصله ای که بین esmaeel تا 22 هست، 1 عدد space هست

خوبی این مسئله اینجاست که فایل متنی بنده برای ستون اول 13 کاراکتر جا گذاشته ، و بعد از 13 همین کاراکتر ستون بعدی شروع میشه (string)
ستون دوم 18 کاراکتر هست و بعد از اون 3 تا space داره (string)
ستون سوم هم 18 کاراکتر هست و بعد از اون 3 تا space داره (string)
ستون چهارم فقط یک رقم عدد هست و بعدش 3 تا space
ستون پنجم آدرس هست که معلوم نیست چند تا string باشه که میره تا انتهای خط

فایل متنی رو به ضمیمه پیوست کردم، شکلی کلی اون هست

خط اولم که نیاز نیست
5 خط آخر هم نیاز نیست

با تشکر

Rain_Saeid
چهارشنبه 30 تیر 1395, 19:36 عصر
سلام مجدد
جداکننده‌ی ستون‌ها تعریف می‌کنه .. که اونم باید در فایل متنی ( Text File ) چک کنی و ببینی آیا مابین رشته‌ها فاصله وجود داره .. یا از کاراکتر دیگه‌ای به عنوان جداکننده استفاده شده ( مثلا کاراکتر TAB یعنی Chr(9) ) یا همون vbTab


جدا کننده تو این فایل space هست، ولی چون بین ستون اول و ستون دوم space ها معلوم نیست چندتا هستن، دقیقا نتونستم کدش رو دربیارم

gilsoft
چهارشنبه 30 تیر 1395, 20:24 عصر
این روش اول:
Private Sub btnRead_Click(sender As System.Object, e As System.EventArgs) Handles btnRead.Click
Dim TextLine As String = ""
Dim SplitLine() As String
Dim FirstLoop As Boolean = True

Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txt.txt")

Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()

If FirstLoop = True Then
SplitLine = Split(TextLine, vbTab)
Dim NC As Integer = SplitLine.GetUpperBound(0)
Dim cl As DataGridViewTextBoxColumn
For i As Integer = 0 To NC
cl = New DataGridViewTextBoxColumn
With cl
.HeaderText = SplitLine(i)
Name = "Col" & SplitLine(i)
.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.ReadOnly = True
End With
DataGridView1.Columns.Add(cl)
Next
FirstLoop = False
Else
TextLine = DeleteSpaces(TextLine)
SplitLine = Split(TextLine, " ")
If SplitLine(0).IndexOf(":") <= 0 And SplitLine.Length > 1 Then
DataGridView1.Rows.Add(SplitLine)
End If
End If
Loop
objReader.Close() : objReader.Dispose()
End Sub

Public Function DeleteSpaces(ByVal str As String) As String
Dim i, len As Integer
len = VB.Len(str)
Dim spc As String
For i = len To 1 Step -1
spc = Space(i)
If InStr(str, spc) > 1 Then str = Replace(str, spc, " ")
Next
Return str
End Function

روش دوم:
Private Sub btnRead_Click(sender As System.Object, e As System.EventArgs) Handles btnRead.Click
Dim TextLine As String = ""
Dim SplitLine() As String
Dim FirstLoop As Boolean = True
Dim NC As Integer
Dim arLine(4) As String

Dim objReader As New System.IO.StreamReader(Application.StartupPath & "\txt.txt")

Do While objReader.Peek() <> -1
TextLine = objReader.ReadLine()

If FirstLoop = True Then
SplitLine = Split(TextLine, vbTab)
NC = SplitLine.GetUpperBound(0)
Dim cl As DataGridViewTextBoxColumn
For i As Integer = 0 To NC
cl = New DataGridViewTextBoxColumn
With cl
.HeaderText = SplitLine(i)
Name = "Col" & SplitLine(i)
.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.ReadOnly = True
End With
DataGridView1.Columns.Add(cl)
Next
FirstLoop = False
Else
If TextLine.Trim.Length > 0 Then
arLine(0) = TextLine.Substring(0, 13).Trim
If arLine(0).IndexOf(":") <= 0 And arLine.Length > 1 Then
arLine(1) = TextLine.Substring(13, 18).Trim
arLine(2) = TextLine.Substring(34, 18).Trim
arLine(3) = TextLine.Substring(55, 1).Trim
arLine(4) = TextLine.Substring(59).Trim

DataGridView1.Rows.Add(arLine)
End If
End If
End If
Loop
objReader.Close() : objReader.Dispose()
End Sub

که من تصور می‌کنم روش دوم مد نظر شماست

موفق باشید .....

Rain_Saeid
پنج شنبه 31 تیر 1395, 09:24 صبح
ممنون استاد

عالی بود.. روش دوم بدرستی جواب داد

البته روش اول هم شاید جواب بده، ولی چون نتونستم اجراش کنم، جواب نگرفتم
خط دوم function قسمت len = VB.Len(str) کلمه vb اینجا متوجه نشدم چیه

در هرصورت تشکر، خیلی عالی بود

gilsoft
پنج شنبه 31 تیر 1395, 10:43 صبح
خط دوم function قسمت len = VB.Len(str) کلمه vb اینجا متوجه نشدم چیه

این خط رو به اول فایل اضافه کن
Imports VB = Microsoft.VisualBasic

و یا بجای len = VB.Len(str) از کد زیر استفاده کن
Len = str.Length

در واقع روش اول با استفاده از تابع DeleteSpaces میاد فاصله‌ها رو حذف می‌کنه

موفق باشید .....

Rain_Saeid
پنج شنبه 31 تیر 1395, 17:06 عصر
این خط رو به اول فایل اضافه کن
Imports VB = Microsoft.VisualBasic

و یا بجای len = VB.Len(str) از کد زیر استفاده کن
Len = str.Length

در واقع روش اول با استفاده از تابع DeleteSpaces میاد فاصله‌ها رو حذف می‌کنه

موفق باشید .....

اولی هم جواب داد، باز هم تشکر

Rain_Saeid
شنبه 02 مرداد 1395, 16:58 عصر
سلام مجدد

استاد ی سوال

بخوام آدرس مثلا ستون دوم و سطر دوم ، یا سطر سوم یا حالا هرستون یا سطری رو تو A ذخیره کنم، نحوه دستورش چطوریه

Dim A as string

با تشکر

gilsoft
یک شنبه 03 مرداد 1395, 06:56 صبح
بخوام آدرس مثلا ستون دوم و سطر دوم ، یا سطر سوم یا حالا هرستون یا سطری رو تو A ذخیره کنم، نحوه دستورش چطوریه

Dim A as string


سلام

شما اول بفرما آدرس توی دیتاگرید رو میخوای ذخیره کنی یا آدرس توی فایل رو ؟ :متفکر:

متغیر A حتما باید از نوع رشته‌ای باشه یا ؟ ( مثلا متغیرهای نوع‌دار « منظور Structure » یا آرایه )

منتظرم .....

Rain_Saeid
یک شنبه 03 مرداد 1395, 17:08 عصر
سلام

شما اول بفرما آدرس توی دیتاگرید رو میخوای ذخیره کنی یا آدرس توی فایل رو ؟ :متفکر:

متغیر A حتما باید از نوع رشته‌ای باشه یا ؟ ( مثلا متغیرهای نوع‌دار « منظور Structure » یا آرایه )

منتظرم .....

متغیر رشته ای میخوام
که هرموقع خواستم ، تو تکس باکس یا داخل متغیر ذخیره کنم

Rain_Saeid
سه شنبه 05 مرداد 1395, 15:23 عصر
مثلا سطر دوم از ستون چهارم رو برای بنده بریزه داخل متغیر رشته ای از String

و همنیطور سطر آخر رو داخل کمبوباکس بچینه..

ممنون میشم راهنمایی بفرمایید

gilsoft
چهارشنبه 06 مرداد 1395, 08:53 صبح
مثلا سطر دوم از ستون چهارم رو برای بنده بریزه داخل متغیر رشته ای از String

سلام دوست عزیز

اینم کد مربوطه:
Dim data As String
data = DataGridView1.Item(3, 1).Value
TextBox1.Text = data


همنیطور سطر آخر رو داخل کمبوباکس بچینه..

Dim LastRow As Integer = IIf(DataGridView1.AllowUserToAddRows, DataGridView1.RowCount - 2, DataGridView1.RowCount - 1)
For c As Integer = 0 To DataGridView1.ColumnCount - 1
ComboBox1.Items.Add(DataGridView1.Item(c, LastRow).Value)
Next

موفق باشید .....

Rain_Saeid
پنج شنبه 07 مرداد 1395, 13:12 عصر
سلام دوست عزیز

اینم کد مربوطه:
Dim data As String
data = DataGridView1.Item(3, 1).Value
TextBox1.Text = data



Dim LastRow As Integer = IIf(DataGridView1.AllowUserToAddRows, DataGridView1.RowCount - 2, DataGridView1.RowCount - 1)
For c As Integer = 0 To DataGridView1.ColumnCount - 1
ComboBox1.Items.Add(DataGridView1.Item(c, LastRow).Value)
Next

موفق باشید .....

با تشکرولی کد اول جواب نداد

کد دوم هم آخرین خط رو انداخت داخل کمبوباکس
میخواستم آخرین ستون یا مثلا ستون دوم بره تو کمبوباکس

gilsoft
پنج شنبه 07 مرداد 1395, 13:43 عصر
کد اول جواب نداد

DataGridView1.Item(3, 1).Value
کد فوق دقیقا ستون چهارم از سطر دوم رو میخونه ( شماره سطر و ستون از 0 شروع میشه ) که مقدارش 2 هست.



کد دوم هم آخرین خط رو انداخت داخل کمبوباکس
میخواستم آخرین ستون یا مثلا ستون دوم بره تو کمبوباکس

شما در پست قبلی فرمودید آخرین سطر !

اینم کد مربوط به آخرین ستون:
Dim LastRow As Integer = IIf(DataGridView1.AllowUserToAddRows, DataGridView1.RowCount - 2, DataGridView1.RowCount - 1)
Dim LastCol As Integer = DataGridView1.ColumnCount - 1
For r As Integer = 0 To LastRow
ComboBox1.Items.Add(DataGridView1.Item(LastCol, r).Value)
Next

موفق باشید .....