PDA

Επιστροφή στο Forum : βοήθεια σε προγραμματακι Vb



Alex_13
05-07-05, 17:04
Έχω ένα προγραμμα, σε Qbasic, και θέλω να το μετατρέψω σε Visual Basic.
Ξεκίνισα λοιπόν, να το δημιουργώ/μετατρέπω, αν και δεν εχω δουλέψει σχεδόν καθόλου σε VB.


Option Explicit

Private aFile As String
Private aLine As String
---------------------------------------------------------------------<declarations

Private Sub Command1_Click()
Call CreateInputFile
End Sub
---------------------------------------------------------------------<Απλο κουμπάκι με ονομα Command1


Private Sub CreateInputFile()
Dim i As Integer
Dim intIndex As Integer
i = 1

aFile = "C:\output.txt"
aLine = ""

intIndex = 4

'1.'This deletes file if it exists and creates a new one if it doesn't
Open "C:\Input.txt" For Output As intIndex

'get last line from the file

Open "C:\output.txt" For Input As #i

Do
Line Input #i, aLine
Loop While Not EOF(i)

'Write line to output file
Print #intIndex, aLine

MsgBox "operation finished"

Unload Me

End Sub

----------------------------------------------------------------< και ο κώδικας


Αυτό που κατέληξα να κάνω είναι να τοποθετώ στο νέο τεξτ αρχείο την τελευταία γραμμή απο το output.txt. Δεν έχω παίξει με τον κώδικα, αλλά μήπως κάποιος που έχει δουλέψει VB μπορεί να με βοηθήσειι τί να κάνω?

Το κείμενο εισαγωγής θα ειναι της παρακάτω μορφής
(01/01/05 - 15/04/05)
------------------------------------------------------------------------------------------------------------
: 50.10.039 PLIS „ €„
------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------
χχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχ
χχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχ
χχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχ
χχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχχ
------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------



τα μόνα που θέλω να πάνε απο την CreateInputFile στον νεο κείμενο, ειναι η περιοχή με τα "χχχχχχχχχ" γραμμή γραμμή, χωρίς σταθερό αριθμό γραμμών.

Ξέρω δεν είναι τίποτα δύσκολο, αλλά δυστιχώς η μη οικειοτητα με την VB, και η μακράν μου απουσία απο οποιαδήποτε γλλώσσσσαα προγραμματισμου με περιορίζουν πάρα πολύ. Οποια βοήθεια είναι ευπρόσδεκτη. Ευχαριστώ

Ice-Blade
05-07-05, 17:35
σε ποιά έκδοση Vb θέλεις να το κάνεις. αν είναι για Vb .net ίσως μπορώ να σε βοηθήσω...

Alex_13
05-07-05, 18:43
Σε VB6 απο το Visual Studio με SP5.
Νομίζω ότι έχω και .net σα κάποιο CD πάντως...

porosis
05-07-05, 18:53
Option Explicit

Private Sub Command1_Click()
Call CreateInputFile
End Sub

Private Sub CreateInputFile()
Dim Diaxoristiko As String
Dim ArxikoArxeio As String
Dim NeoArxeio As String
Dim temp As String

Diaxoristiko = "------------------------------------------------------------------------------------------------------------"
ArxikoArxeio = "C:\VBTEST\in.txt"
NeoArxeio = "C:\VBTEST\out.txt"

'Άνοιγμα του ArxikoArxeio για ανάγνωση
Open ArxikoArxeio For Input As #1

'Δημιουργία του NeoArxeio/αν υπάρχει ήδη θα διαγραφούν τα περιεχόμενα του!!!
Open NeoArxeio For Output As #2

Dim count As Integer 'μετρά πόσα διαχωριστικά "-------" συναντήθηκαν στο διάβασμα του αρχείου

'ανάγνωση των γραμμών του αρχείου ArxikoArxeio μέχρι να διαβαστούν 3 διαχωριστικά "----"
Do While count < 3
Line Input #1, temp
If temp = Diaxoristiko Then count = count + 1
Loop

Line Input #1, temp 'ανάγνωση της πρώτης από τις γραμμές "χχχχχχ" που θέλουμε να αντιγράψουμε

'διαβάζουμε τις υπόλοιπες γραμμες "χχχχχ" μέχρι να συναντήσουμε διαχωριστικό
Do While temp <> Diaxoristiko
Print #2, temp 'γράφουμε στο αρχείο εξόδου την γραμμή που διαβάστηκε προηγουμένως
Line Input #1, temp 'ανάγνωση της επόμενης γραμμής
Loop

'κλείσιμο των αρχείων που ανοίξαμε
Close #1
Close #2

MsgBox "operation finished"

Unload Me

End Sub



Άλλαξε τα ArxikoArxeio, NeoArxeio σε αυτά που θέλεις

EDIT: Θα μπορούσες να βάλεις δυο textbox, όπου θα εισάγεις τα ονόματα των αρχείων που θα επεξεργαστεί το πρόγραμμα.

Alex_13
05-07-05, 19:29
Ναί, πολύ καλή ιδέα. Βασικά δεν θα είναι τόσο απλό το προγραμμα. Θα προτθουν κατι αλλα functions που ήδη εχω κάνει(πριν 1-2 χρονια, ουτε εγω θυμάμαι τί είνα, ισως κάποια να θέλουν και μια μικρο αναβάθμηση, καθώς είχαν γίνει απο σε πιο παλια έκδοση VBι), και θέλω να κάνω και κάτι export σε XLS φορμάτ, κάτι που δεν το έχω ακόμα ψάξει και δεν έχω ιδέα πως θα το κάνω τώρα. είμαι που είμαι "κάπως" σκουριασμένος με την Basic, αυτό μου έλειπε απο πάνω..

Πάντως 1000 ευχαριστώ δεν είναι αρκετά. Και ξέρεις, τώρα που το βλέπω, λέω καλά τόσο εύκολο ήταν, "γιατι κοιμάμαι όρθιος και δεν εβγαζα άκρη?". Να φανταστείς, στην αρχή ήθελα το νεο αρχείο να δημιουργηθεί απο 3 άλλα διαφορετικα, (για το λόγο αυτο υπήρχα και μερικες εντελώς random "ι" μεταβλητες εδώ και εκει (έιχα ένα πίνακα 2x3 θέσεων)) Ευχαριστώ και πάλι απεριόριστα :D

geo71
05-07-05, 21:41
Χωρίς να ξέρω τι ακριβώς θές να κάνεις και κατά πόσο οι γραμμές "----" και το header "50.10.039..." ειναι "σταθερές" ή μπορούν να αλλαχθούν, μια λύση απλή είναι να δημιουργήσεις 3 τχτ αρχεία:

1 - το header αρχείο με τις πρώτες γραμμές
2 - το κυρίως αρχείο με τα ΧΧΧΧΧΧ
3 - το footer αρχειο με τις τελευταίες γραμμές

Ανοίγεις το 2ο αρχείο "for Append" και όταν θέλεις να δημιουργήσεις ένα "ολοκληρωμένο" κάνεις merge και τα τρία ή μέσω κώδικα ή μέσω ενός batch file.

Με τον τρόπο αυτό - εφόσον δουλεύεις με τχτ αρχεία - μπορείς να σχεδιάσεις τα header/footer όπως θέλεις ενώ η βασική λειτουργία περιορίζεται στην append.

Edit: η λύση των 3 αρχείων, που όπως ανέφερες τη δοκίμασες ή σκέφτηκες να τη δοκιμάσεις, είναι ευέλικτη μιας και δεν χρειάζεται να αλλάζεις κώδικα.

yiapap
05-07-05, 22:11
Συμφωνώ με τον Geo71.
Στο header αρχείο (options.ini) μπορείς να αποθηκεύσεις τις προτιμήσεις του χρήστη.
Σε αυτό μπορούν να σου φανούν επίσης χρήσιμες οι GetSetting, SaveSetting που διαβάζουν/αποθηκεύουν μεταβλητές στη Registry.

Για Output σε Excel θα δημιουργήσεις ένα αντικείμενο Excel, είτε προσθέτωντας ένα reference στη βιβλιοθήκη Microsoft Excel είτε με την εντολή
Set oExcel = CreateObject("Excel.Application")
Από κει και πέρα μπορείς να διαχειριστείς αυτό το αντικείμενο για να φορτώσει υπάρχων workbook, να δημιουργήσεις νέο, να αλλάξεις τις τιμές των κελιών και τέλος πάντως οτιδήποτε θα έκανες μέσα από τη VBA του Excel.
Η πρώτη μέθοδος (Reference) είναι πιο γρήγορη στην εκτέλεση αλλά είναι version specific (δλδ αν έχεις εσύ reference σε Excel 2003 ΔΕ θα παίιξει σε H/Y με Excel 2000) η 2η είναι πιο αργή, σε δυσκολεύει στην πληκτρολόγηση (δεν υπάρχει helper όταν γράφεις την "." για να σου δώσει μεθόδους/ιδιότητες) αλλά είναι version independent.

Αυτό που κάνω εγώ είναι να δημιουργώ το reference να δηλώνω όλα τα αντικείμενα πλήρως
π.χ. Dim oExcel As Excel.Application
Dim oSheet as Excel.WorkSheet
και να ολοκληρώνω την εφαρμογή έτσι.
Μετά βγάζω το reference, αλλάζω τους τύπους των Dim σε Variants και χρησιμοποιώ τη 2η μέθοδο (late binding)
δλδ. τα dims γίνονται
Dim oExcel ' As Excel.Application
Set oExcel = CreateObject("Excel.Application")
κ.ο.κ.

geo71
06-07-05, 08:19
Επίσης, για να διευκολυνθείς στο load/save του αρχείου ν.2 (XXXXXX) θα μπορούσες να χρησιμοποιήσεις ένα listbox και να το γεμίζεις με τα διάφορα XXXXX, να χρησιμοποιήσεις την μέθοδο ItemsAdd (για να προσθέσεις νέα στοιχεία) και να σώσεις τα περιεχόμενα του listbox (με ένα loop από 0 εώς Item.Count-1) σε νέο αρχείο. Εξαρτάται από το κατά πόσο θέλεις να φαίνονται τα ΧΧΧΧΧ ώς λίστα ή σε ενδιαφέρει μόνο η απλή καταχώρησή τους.

Alex_13
06-07-05, 15:00
Βασικά αυτή τη στιγμή, είμαι ok, απλά θέλω τώρα να καλώ το νεο αρχειο να τρεξει. Η shell δεν κάνει βεβαίως και για το λόγο αυτο πηρα ενα module απο μια πιο παλιά εφαρμογή που ειχα κάνει, που μου επιτρέπει να το εκτελώ, μόνο προβλημα ειναι οτι οταν καλώ το αρχειο αυτο πρεπει να είναι τον ίδιο φάκελο με το ίδιο το προγραμμα "/file.txt γιατι για κάποιο λόγω αδυναμίας στον κώδικα το module δεν παίρνει το full path του αρχείου.

yiapap. Θα το δοκιμάσω αυτο που είπες για το excel μόλις χρειαστει να το κάνω. Thanks :thumbsup1

yiapap
08-07-05, 11:01
Τι εννοείς "να τρέξει" το αρχείο;
Εννοείς να ανοίξει κάποιος editor με το out.txt?
Αν ναι, ψάξε στο Google για ShellExecute API

Alex_13
11-07-05, 00:02
ναι, ακριβώς, το ίδιo χρησημοποιω πλεον και εγω. ShellExecute

@ ADSLgr.com All rights reserved.