PDA

View Full Version : کار با فایل متنی



en-keramat
جمعه 05 اردیبهشت 1393, 18:27 عصر
دوستان سلام
من میخوام یه فایل text درست کنم که یه نرم افزار اونو میخونه ، تو این فایل فاصله هر ستون (تعداد کاراکترهای خالی ) هم مهمه و باید رعایت بشه، چطوری می تونم این فایل درست کنم ؟

در واقع نرم افزار می خوام درست کنم که اطلاعات از یک فایل اکسل یا text بخونه و فایل زیر درست کنه

چه پیشنهادی دارید ؟


118328

نوشته ها ثابت هستند و اعداد متغییر

amirsajjadi
جمعه 05 اردیبهشت 1393, 18:37 عصر
یکم بیشتر توضیح بدید؟

en-keramat
جمعه 05 اردیبهشت 1393, 19:17 عصر
یکم بیشتر توضیح بدید؟

من یک سری مشاهدهات نقشه برداری دارم از جمله زاویه افقی ، قائم ، فواصل ، مختصات ، دقت دوربین و ... که فایل مشاهدات هم ضمیمه کردم ، برای پردازش و سرشکنی اون ها نرم افزار ژئولب فرمت خاصی قبول میکنه که مجبورم به طور دستی درست اش کنم که سخت و اشتباه زیاد میشه
حالا میخوام یه نرم افزار درست کنم که فایل مشاهدات بخونه و تبدیل اش کنه به فرمت قابل قبول نرم افزار ژئولب

amirsajjadi
شنبه 06 اردیبهشت 1393, 09:48 صبح
من نمیدونم نرم افزار
ژئولب چه فرمت فایلی قبول میکنه ولی شما میتونید اطلاعات رو از هر جایی که بخونید داخل یک رشته ذخیره کنید و سپس توی فایل ذخیره کنید. برای ذخیره سازی درون فایل میتونید از متد IO.File.WriteAllText استفاده کنید که پارامتر اول آدرس فایل و پارامتر دوم محتوا می باشد.

majidnazari65
شنبه 06 اردیبهشت 1393, 11:31 صبح
در فایلی که گذاشتی عرض ستونها همیشه ثابته؟ در این صورت اگه طول یه رشته بیشتر از عرض ستون بشه باید از بقیه کاراکترهای رشته صرف نظر کرد یا اینکه طول کلی ستون باید تغییر پیدا کنه؟
اگر طول ستونها همیشه ثابته مثلا (20 کاراکتر) و با فرض اینکه نام ستونها و اطلاعات توی آرایه strData ذخیره شده چیزی مثل کد زیر باید بنویسی:

My.Computer.FileSystem.WriteAllText("d:\00.txt", "", False)
For j As Integer = 0 To 5
For i As Integer = 0 To 4
My.Computer.FileSystem.WriteAllText("d:\00.txt", Strings.LSet(strData(i, j), 20), True)


Next
My.Computer.FileSystem.WriteAllText("d:\00.txt", vbNewLine, True)
Next


strData شامل پنج ستون و شش ردیفه که ردیف اول میتونه نام ستونها باشه. دستور Strings.Lset هم طول یک رشته رو ثابت میکنه به عدد 20 (اگر کمتر از 20 کاراکتر باشه با فاصله پر میشه و اگر بیشتر باشه همون 20 کاراکتر پر میشه)

en-keramat
شنبه 06 اردیبهشت 1393, 21:42 عصر
در فایلی که گذاشتی عرض ستونها همیشه ثابته؟ در این صورت اگه طول یه رشته بیشتر از عرض ستون بشه باید از بقیه کاراکترهای رشته صرف نظر کرد یا اینکه طول کلی ستون باید تغییر پیدا کنه؟
اگر طول ستونها همیشه ثابته مثلا (20 کاراکتر) و با فرض اینکه نام ستونها و اطلاعات توی آرایه strData ذخیره شده چیزی مثل کد زیر باید بنویسی:

My.Computer.FileSystem.WriteAllText("d:\00.txt", "", False)
For j As Integer = 0 To 5
For i As Integer = 0 To 4
My.Computer.FileSystem.WriteAllText("d:\00.txt", Strings.LSet(strData(i, j), 20), True)


Next
My.Computer.FileSystem.WriteAllText("d:\00.txt", vbNewLine, True)
Next


strData شامل پنج ستون و شش ردیفه که ردیف اول میتونه نام ستونها باشه. دستور Strings.Lset هم طول یک رشته رو ثابت میکنه به عدد 20 (اگر کمتر از 20 کاراکتر باشه با فاصله پر میشه و اگر بیشتر باشه همون 20 کاراکتر پر میشه)


نه ثابت نیست
می خوام هر پاراگراف با یک کد بنویسیم که در اینصورت عرض ستونها ثابت میشه ، برای اینکار باید هر ستون از فایل ورودی در یک متغییر قرار بدم بعد بیام تو هر پارگراف اون ستون تو فایل تکس بنویسم ، مشکلی که هست توابعی که بتونه فایل بخون و هر ستون در یک متغییر بریز زو نمیدونم

majidnazari65
شنبه 06 اردیبهشت 1393, 21:59 عصر
فایل text to geolab فایلیه که باید ازش بخونی؟

en-keramat
شنبه 06 اردیبهشت 1393, 22:39 عصر
فایل text to geolab فایلیه که باید ازش بخونی؟

بله ، میخوام این فایل بخونم بعد تبدیل بشه به فایل GeoLab

majidnazari65
شنبه 06 اردیبهشت 1393, 23:55 عصر
برای خوندن فایل از این کد استفاده کن:
ستونها با کاراکتر tab از هم جدا شدن. نام ستونها رو از دو سطر اول میتونی بدست بیاری ولی تعداد دقیق ستونها از سطر دوم به دست میاد. در اینجا دو سطر اول خونده میشه ولی فقط از سطر دوم استفاده میشه (خودت این دو سطر رو برای نام ستونها ادغام کن) . برای استفاده از این کد یه لیست ویو با نام liV و یه Button بذار روی فرم.



Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click




Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("re.txt")
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
MyReader.SetDelimiters(vbTab)
Dim colsName() As String, colsName1() As String
colsName1 = MyReader.ReadFields
colsName = MyReader.ReadFields
For Each ss As String In colsName
liV.Columns.Add(ss)
Next
Dim currentRow() As String
While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
Dim livItem As ListViewItem = New ListViewItem(currentRow)
liV.Items.Add(livItem)


Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineExceptio n
'MsgBox("Line " & ex.Message & "is not valid and will be skipped.")
End Try
End While
End Using


End Sub



من برای مثال از اطلاعات، توی لیست ویو استفاده کردم، شما با این اطلاعات خروجی ای که میخوای رو به شیوه پست قبلی ایجاد کن.