Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
12
Cevap
1805
Tıklama
0
Öne Çıkarma
[Vb6]Input Past End Of File Hatası
G
15 yıl
Çavuş
Konu Sahibi

Bir türlü çözemedim anlamadım..Gerçekten acil yardıma ihtiyacım var..Proje bitti bu hatayı aldım..
Debug da hatayı write ini modülünde gösteriyor...
Temp = Input$(LOF(NF), NF)
Bu kısımda...

Modül iste bu şekilde...

Option Explicit 

Public Function WriteIniValue(INIpath As String, PutKey As String, PutVariable As String, PutValue As String)
Dim Temp As String
Dim LcaseTemp As String
Dim ReadKey As String
Dim ReadVariable As String
Dim LOKEY As Integer
Dim HIKEY As Integer
Dim KEYLEN As Integer
Dim VAR As Integer
Dim VARENDOFLINE As Integer
Dim NF As Integer
Dim x As Integer

AssignVariables:
NF = FreeFile
ReadKey = vbCrLf & "[" & LCase$(PutKey) & "]" & Chr$(13)
KEYLEN = Len(ReadKey)
ReadVariable = Chr$(10) & LCase$(PutVariable) & "="

EnsureFileExists:
Open INIpath For Binary As NF
Close NF
SetAttr INIpath, vbArchive

LoadFile:
Open INIpath For Input As NF
Temp = Input$(LOF(NF), NF)
Temp = vbCrLf & Temp & "[]"
Close NF
LcaseTemp = LCase$(Temp)

LogicMenu:
LOKEY = InStr(LcaseTemp, ReadKey)
If LOKEY = 0 Then GoTo AddKey:
HIKEY = InStr(LOKEY + KEYLEN, LcaseTemp, "[")
VAR = InStr(LOKEY, LcaseTemp, ReadVariable)
If VAR > HIKEY Or VAR < LOKEY Then GoTo AddVariable:
GoTo RenewVariable:

AddKey:
Temp = Left$(Temp, Len(Temp) - 2)
Temp = Temp & vbCrLf & vbCrLf & "[" & PutKey & "]" & vbCrLf & PutVariable & "=" & PutValue
GoTo TrimFinalString:

AddVariable:
Temp = Left$(Temp, Len(Temp) - 2)
Temp = Left$(Temp, LOKEY + KEYLEN) & PutVariable & "=" & PutValue & vbCrLf & Mid$(Temp, LOKEY + KEYLEN + 1)
GoTo TrimFinalString:

RenewVariable:
Temp = Left$(Temp, Len(Temp) - 2)
VARENDOFLINE = InStr(VAR, Temp, Chr$(13))
Temp = Left$(Temp, VAR) & PutVariable & "=" & PutValue & Mid$(Temp, VARENDOFLINE)
GoTo TrimFinalString:

TrimFinalString:
Temp = Mid$(Temp, 2)
Do Until InStr(Temp, vbCrLf & vbCrLf & vbCrLf) = 0
Temp = Replace(Temp, vbCrLf & vbCrLf & vbCrLf, vbCrLf & vbCrLf)
Loop

Do Until Right$(Temp, 1) > Chr$(13)
Temp = Left$(Temp, Len(Temp) - 1)
Loop

Do Until Left$(Temp, 1) > Chr$(13)
Temp = Mid$(Temp, 2)
Loop

OutputAmendedINIFile:
Open INIpath For Output As NF
Print #NF, Temp
Close NF

End Function



G
15 yıl
Çavuş
Konu Sahibi

F8 ile kontrol ettim..
quote:

While Not EOF(NF)
Line Input #NF, Temp
LcaseTemp = LCase$(Temp)
If InStr(LcaseTemp, "[") <> 0 Then ReadyToRead = False
If LcaseTemp = KEY Then ReadyToRead = True
If InStr(LcaseTemp, "[") = 0 And ReadyToRead = True Then
If InStr(LcaseTemp, Variable & "=") = 1 Then
ReadIniValue = Mid$(Temp, 1 + Len(Variable & "="))
Close NF: Exit Function
End If
End If
Wend


bu kısım read ini modülünde ...
Form1de de read write ini ve database kullanıyorum ama hata almıyorum..
Ama Form2 de alıyorum..Form2 de daha fazla read ve write vaar...
Birde hata form açılr açılmaz birşeye basmadan geliyor..Form load larda hiç write ini yok..Database ile ilgili birşeyde yok..Sadece read ini var..
O yüzden kesin sorun burada..
Nasıl halledebilirim bu sorunu???





< Bu mesaj bu kişi tarafından değiştirildi ghost7wolf -- 9 Nisan 2010; 0:22:58 >
Bu mesaja 1 cevap geldi.
İ
15 yıl
Binbaşı

Merhaba ,
Sıralı erişimde dosyayı okuma/yazma modunda açıyorsanız başka bir işlem için dosyanın açık olmadığından emin olmalısınız.
Başka bir yordamın içinde kullanıp dosyayı close # yapmadıysanız hata oluşabilir.


Bu mesaja 1 cevap geldi.
G
15 yıl
Çavuş
Konu Sahibi

Form1 de niye hata vermiyor..Aynı şeyleri kullandım..
Write yazıp daha sonra okuyabiliyorum..
Başka ini dosyasına geçebiliyorum..Modül den bunu düzeltebilir miyiz?


Bu mesaja 1 cevap geldi.
İ
15 yıl
Binbaşı

Merhaba ,

Kodunuzu biraz inceledim bir functionun içerisinde bir çok alt parça kod işletmişsiniz. Bu şekilde bir kod yazımı bence çok sağlıklı değil , tabi bazı şeyler kodu yazan kişinin insiyatifindedir, ama ben bu tarz konularda hep biraz daha fazla kodlama yapıp işlemin düzenli olmasını tercih ederim. Aşağıdaki gibi ADDkey , ADDvariable gibi aynı kodun içerisinde karmaşık bir şekilde işleteceğinize bu işlemler için ayrı ayrı functionlar tanımlamak, hatanızı daha kolay betimlemenizi sağlayabilir.

Public Function WriteIniValue(INIpath As String, PutKey As String, PutVariable As String, PutValue As String)
Dim Temp As String
Dim LcaseTemp As String
Dim ReadKey As String
Dim ReadVariable As String
Dim LOKEY As Integer
Dim HIKEY As Integer
Dim KEYLEN As Integer
Dim VAR As Integer
Dim VARENDOFLINE As Integer
Dim NF As Integer
Dim x As Integer

AssignVariables:
NF = FreeFile
ReadKey = vbCrLf & "[" & LCase$(PutKey) & "]" & Chr$(13)
KEYLEN = Len(ReadKey)
ReadVariable = Chr$(10) & LCase$(PutVariable) & "="

EnsureFileExists:
Open INIpath For Binary As NF
Close NF
SetAttr INIpath, vbArchive

LoadFile:
Open INIpath For Input As NF
Temp = Input$(LOF(NF), NF)
Temp = vbCrLf & Temp & "[]"
Close NF
LcaseTemp = LCase$(Temp)

LogicMenu:
LOKEY = InStr(LcaseTemp, ReadKey)
If LOKEY = 0 Then GoTo AddKey:
HIKEY = InStr(LOKEY + KEYLEN, LcaseTemp, "[")
VAR = InStr(LOKEY, LcaseTemp, ReadVariable)
If VAR > HIKEY Or VAR < LOKEY Then GoTo AddVariable:
GoTo RenewVariable:

AddKey:
Temp = Left$(Temp, Len(Temp) - 2)
Temp = Temp & vbCrLf & vbCrLf & "[" & PutKey & "]" & vbCrLf & PutVariable & "=" & PutValue
GoTo TrimFinalString:

AddVariable:
Temp = Left$(Temp, Len(Temp) - 2)
Temp = Left$(Temp, LOKEY + KEYLEN) & PutVariable & "=" & PutValue & vbCrLf & Mid$(Temp, LOKEY + KEYLEN + 1)
GoTo TrimFinalString:

RenewVariable:
Temp = Left$(Temp, Len(Temp) - 2)
VARENDOFLINE = InStr(VAR, Temp, Chr$(13))
Temp = Left$(Temp, VAR) & PutVariable & "=" & PutValue & Mid$(Temp, VARENDOFLINE)
GoTo TrimFinalString:

TrimFinalString:
Temp = Mid$(Temp, 2)
Do Until InStr(Temp, vbCrLf & vbCrLf & vbCrLf) = 0
Temp = Replace(Temp, vbCrLf & vbCrLf & vbCrLf, vbCrLf & vbCrLf)
Loop

Do Until Right$(Temp, 1) > Chr$(13)
Temp = Left$(Temp, Len(Temp) - 1)
Loop

Do Until Left$(Temp, 1) > Chr$(13)
Temp = Mid$(Temp, 2)
Loop

OutputAmendedINIFile:
Open INIpath For Output As NF
Print #NF, Temp
Close NF

End Function


Bu mesaja 1 cevap geldi.
G
15 yıl
Çavuş
Konu Sahibi

Modülü nette buldum..Kendi kodlarım değil..
Senin yazdığını denedim gene aynı hatayı verdi..
Başka modülleride deneyemiyorum..Çünkü bütün kodları baştan değiştirmek gerekiyor..
WriteIniValue yazan kısım hepsinde farklı oluyor..
Üst kısım yani kodda kullanılacak kısım aynı olacak şekilde düzgün..write ini ve read ini modül paylaşırsanız sevinirim..





< Bu mesaj bu kişi tarafından değiştirildi ghost7wolf -- 14 Nisan 2010; 19:57:13 >
Bu mesaja 1 cevap geldi.
İ
15 yıl
Binbaşı

Merhaba ,

Write ini bölümünde herhangi bir hata görünmüyor , Okuma yaptığınız bölüm hatalı gibi o kısımın kodlarını paylaşırsanız vaktim ölçüsünde inceleyip yardımcı olmaya çalışabilirim.


Bu mesaja 1 cevap geldi.
G
15 yıl
Çavuş
Konu Sahibi

Buda read modülü..

Option Explicit 

Public Function ReadIniValue(INIpath As String, KEY As String, Variable As String) As String
Dim NF As Integer
Dim Temp As String
Dim LcaseTemp As String
Dim ReadyToRead As Boolean

AssignVariables:
NF = FreeFile
ReadIniValue = ""
KEY = "[" & LCase$(KEY) & "]"
Variable = LCase$(Variable)

EnsureFileExists:
Open INIpath For Binary As NF
Close NF
SetAttr INIpath, vbArchive

LoadFile:
Open INIpath For Input As NF
While Not EOF(NF)
Line Input #NF, Temp
LcaseTemp = LCase$(Temp)
If InStr(LcaseTemp, "[") <> 0 Then ReadyToRead = False
If LcaseTemp = KEY Then ReadyToRead = True
If InStr(LcaseTemp, "[") = 0 And ReadyToRead = True Then
If InStr(LcaseTemp, Variable & "=") = 1 Then
ReadIniValue = Mid$(Temp, 1 + Len(Variable & "="))
Close NF: Exit Function
End If
End If
Wend
Close NF
End Function


Bu mesaja 1 cevap geldi.
İ
15 yıl
Binbaşı

Merhaba ,

her iki kod ile de deneme yaptım ama bende bir problem görünmüyor. Ben kendi çalıştığım küçük örneği webe yükledim sizde indirip göz gezdirebilirsiniz. Belki dosya yolu yada localinizden kaynaklanan bir sorun olabilir diye düşünüyorum yada kayıt yaptığınız ini dosyası içerisine beklenmedik hatalı bir veri kayıt edilmiş olabilir.

http://r a p i d s h a r e.com/files/376132638/test_vb.rar.html

iyi çalışmalar.


Bu mesaja 1 cevap geldi.
G
15 yıl
Çavuş
Konu Sahibi

Dostum sorun kesinlikle read ini modülünde..
Benimde başta hata vermiyordu..
Ama şimdi veriyor 6 tane form var..Hepsinde read ini kullanıldı..Ama 2.sinde hata vermiyor..

Diğerlerinde veriyor..İni dosyasında gerekli kısımlar var ama bulmuyor..F8 ile kontrol ettiğimde modülde burada takılıp kalıyor..

While Not EOF(NF)
Line Input #NF, Temp
LcaseTemp = LCase$(Temp)
If InStr(LcaseTemp, "[") <> 0 Then ReadyToRead = False
If LcaseTemp = KEY Then ReadyToRead = True
If InStr(LcaseTemp, "[") = 0 And ReadyToRead = True Then
If InStr(LcaseTemp, Variable & "=") = 1 Then
ReadIniValue = Mid$(Temp, 1 + Len(Variable & "="))
Close NF: Exit Function
End If
End If
Wend


Bu mesaja 1 cevap geldi.
G
15 yıl
Çavuş
Konu Sahibi

Yok bu sefer eminim..Ama hala çözemedim..
Ben form1 de hem okuyup yazıyorum..Ama sadece bir tane ini dosyası kullanıyorum..
Ama diğer hata veren formlarda load larında..
3 tane ayrı ini dosyasını okuyup yazmaya çalışıyorum o yüzden hata veriyor..
Bu sorunu nasıl halledebilirim..


Bu mesaja 1 cevap geldi.
İ
15 yıl
Binbaşı

Merhaba ,

Eğer sakıncası yok ise programınızın komple kodunu paylaşırsanız o yönde inceleyebiliriz. Aslında mevcut kodda syntax hatası yok , ben ağırlıklı olarak sizin kodlamada bazı noktaları gözden kaçırdığınızı düşünüyorum.

iyi çalışmalar.


Bu mesaja 1 cevap geldi.
G
15 yıl
Çavuş
Konu Sahibi

Kaç haftadır sinir oldum...
Derleyicide programımı açıyorum hata vermiyor..Exe ye dönüştürüp çalıştırıyorum.Hata veriyor..Bir türlü çözemedim..Derleyici microsoftun olmasa laf atacamda microsoftun
Çok basit ini yazma okuma kodları..
Bu hataları vermesi çok komik..ilginç..
Arkadaşımla kodları teker teker kontrol ettik çözemedik..



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.