599
צפיות
צפיות
50
תשובות
תשובות
בעיה מוזרה בקוד
מישהו יכול להסביר לי מה לא בסדר בקוד שכתבתי? כל פעם הוא מחזיר לי משהו אחר בלי שום קשר ואני לא מצליח להבין מה לא טוב פה.
For i=0 to 9
counter=replace(counter,"" & i & "","<img src=pics/" & FolderNum & "/" & i & ".jpg>")
Next
מה שהקוד אמור לעשות זה לקבל את קאונטר (משתנה מסוג integer) ולהפוך את כל הספרות בו שבין 0-9 לתמונות. FolderNum זה מספר התיקיה שאליה הוא ניגש לקחת את התמונה. עכשיו הבעיה היא שכשאני מריץ את זה פעם אחת זה עובד כמו שצריך ואני רואה תמונות במקום מספרים, פעם אחרת אני רואה רק חלק מהתמונות וליד זה יש < או משהו דומה. בקיצור פעם אחת זה מחזיר:
<img src=pics/1/5.jpg>
ופעם אחרת זה מחזיר
<img src=pics/<img src=pics/1/1.jpg>/0.jpg>
50 תשובות
אם אני לא טועה
זה כי אתה עובר על זה בלולאה וגם אתה מחליף את ה-i בכל פעם מחדש ולכן זה מחליף לך גם את החלק שמעיד על התמונה (i.jpg)
אם אני לא טועה (שוב שים לב) אם היית עובד עם JS צד שרת (ASP עם JS)
אז היית יכול להשתמש ב-regEXP ואפילו לא בצד שרת בצד הלקוח
וההרפלייס בשימוש ה-regExp היה עוזר לך
נ.ב
בימים אלו אני מנסה ללמוד regExp ולכתוב מאמר לאתר תוך כדי (כשיש לי זמן)
אתר גדול וחזק יש לנו כאן (ומי ש… טוב אני לא רוצה להכניס את הבעיות בתפוז כאן אז לא משנה)
up
יש כנראה איזה משהו לא חוקי במה שכתבתי…
מישהו יודע?
אני חושב שצריך לראות עוד קצת קוד
בשביל לענות על זה.
אממממ אין לי כמעט שום דבר נוסף בקוד
אבל הנה:
dim conn,rs,sql
set conn=server.CreateObject("adodb.connection")
set rs=server.CreateObject("adodb.recordset")
conn.Open DB
sql="select * from counters where id=1"
rs.Open sql,conn,3,3
rs("counter")=Cint(rs("counter"))+1
rs.Update
rs.Close
rs.Open
Dim counter,FolderNumber
Counter=rs("counter")
FolderNum=rs("style")
rs.Close
set rs=nothing
conn.Close
set conn=nothing
For i=0 to 9
counter=replace(counter,"" & i & "","<img src=pics/" & FolderNum & "/" & i & ".jpg>")
Next
%>
<%=counter%>
תראה לנו מה מכיל המשתנה counter
כשהוא עושה את ההחלפה השגויה.
אופס
השורה ה-Cint אולי נראה מה שמפריע אבל בקוד שלי זה Cstr
הנה:
החלפה שגויה:
<img src=pics/3/7.jpg><img src=pics/3/5.jpg><img src=pics/<img src=pics/3/3.jpg>/1.jpg>
החלפה נכונה:
<img src=pics/3/7.jpg><img src=pics/3/5.jpg><img src=pics/3/4.jpg>
פעם אחת זה הפלט פעם אחרת השני זה הפלט…
נסה כך…
דבר ראשון ה-cint תכניס את הוספת האחד לתוך ה-CINT
דבר שני במקום לולאה תעשה 10 רפלייסים שכל אחד מהם עושה רפלייס למס' אחר נסה אולי כך זה יעבוד
הוא מחזיר את זה
כי הקוד בלולאה.
ניסיתי כבר 10 ריפלייסים
וזה לא עזר…
אז אין שום קשר לזה שזה בלולאה
זה איכשהו קשור, תן את כל הקוד.
נו נתתי כבר את כל הקוד
עשה כך:
For i=0 to 9
counter=replace(counter,"" & i & "","<img src=pics/" & FolderNum & "/" & i & ".jpg>")
Next
Select Case counter
Case 1:
counter=replace(counter,1,"<img src=pics/" & FolderNum & "/1.jpg>")
Case 2:
counter=replace(counter,2,"<img src=pics/" & FolderNum & "/2.jpg>")
Case 3:
counter=replace(counter,3,"<img src=pics/" & FolderNum & "/3.jpg>")
Case 4:
counter=replace(counter,4,"<img src=pics/" & FolderNum & "/4.jpg>")
Case 5:
counter=replace(counter,5,"<img src=pics/" & FolderNum & "/5.jpg>")
Case 6:
counter=replace(counter,6,"<img src=pics/" & FolderNum & "/6.jpg>")
Case 7:
counter=replace(counter,7,"<img src=pics/" & FolderNum & "/7.jpg>")
Case 8:
counter=replace(counter,8,"<img src=pics/" & FolderNum & "/8.jpg>")
Case 9:
counter=replace(counter,9,"<img src=pics/" & FolderNum & "/9.jpg>")
End Select
לעשות את ה-case
התכוונת לעשות את ה-case בלי הלולאת for לפניו, נכון?
כן, תוריד את הלולאה.
לא טוב
שוב לא טוב
"לא טוב" זו תשובה לא מספקת.
מה הוא מציג? אתה מקבל שגיאה?
אממ כן
הרי ה-case שכתבת לי הוא על ערכים מספריים ומה שיש ב-counter זה סטרינג וזאת השגיאה, ז"א ה-type שונה בין שני הדברים….
אבל זה לא חשוב כי שיניתי את זה ועדיין זה "לא טוב" אני מקבל את אותה תוצאה
פעם אחת זה מציג לי תמונות ופעם שנייה לא.
ועוד שאלה קטנה –
ה FolderNum הוא גם סטרינג..?
ה-folder num
ה-foldernum מקבל ערך של integer אבל לא הגדרתי אותו כ-integer אלא סתם כתבתי
dim FolderNum
ב-VBS
אין הגדרת משתנים ומה שהם עושים כמו ב-ג'אווה ושפות תיכנות אחרות (לגבי JS לא זוכר) אתה מחליט נה יוכנס לשם בלי להגדיר קודם
אולי כך
שים את זה במקום הלולאה:
counter=replace(counter,counter,"<img src=pics/" & FolderNum & "/" & counter & ".jpg>")
ואם זה לא עובד אנא פרט עבור אילו ערכים זה עובד טוב ועבור אילו לא.
ב JS
גם אין הגדרה של סוג משתנה
אוריקס אבל תחשוב ככה…
נגיד וכתוב לו במונה 1000 אז הוא יצטרך להכין 1000 תמונות
זה קצת מוגזם
רגע…
אתה מקבל COUNTER… אם ה Counter הוא 7 לדוגמא, אז אתה צריך להציג את תמונה 7, 8, 9?
(כלומר ה Counter הוא מספר בין 0 ל 9).
לדעתי
הוא צריך לעבור ל-JS ושם להשתמש ב-regEXP
לא…
המשתנה counter שלו זה המונה עצמו שיכול להגיע עד אין גבול מסוים ה-overFlow לדעתי הוא צריך להפריד בין כל מס' ולעשות על כל אחד בנפרד רפלייס
מה אתה סתם זורק פה מילים
overflow שום אובר זה קאונטר – מונה מבקרים שהספרות שלנו נעות בין 0 ל-9 ולידיעתך ב-vbscript אפשר להגדיר משתנה שהיה מטיפוס מסוים אז אל תגיד סתם שאי אפשר…
אממ וניסיתי בלי לואלה לעבור עליהם מ-0 עד 9 שלכל אחד כתבתי שורה משלו וזה לא עזר. המספרים שבדרך כלל חוזרים עם שגיאה זה 0,1,2 אבל לפעמים גם מספרים אחרים
עכשיו הכל ברור
dim x
for i=0 to len(counter)
x=x & "<img src = pics/"&FolderNum&"/" &cint(mid(counter,i,1)) &".jpg><br>"
next
response.write x
שני דברים
שאני אומר שהיא אפשר להגדיר טיפוס אז אי אפשר אתה יכול להגדיר בתוך המשתנה אבל לא להגדיר את המשתנה עצמו למשל כמו בג'אווה שעושים כך :
int num1;
char tav1;
String str1;
ו-overFlow אולי הספרות נעות בין 0 ל-9 אבל זה לא אומר שהמספר עצמו נע בין 0 ל-9 נגיד המס' שלך הוא 2539 נכון יש בו 4 ספרות שנעות בין 0 ל-9 אבל המס' עצמו כבר עבר את האלף, אך כרגע אין איתו שום בעייה רק כשהוא יגיע למס' כזה נגיד 10000000000000 (מס' די חלומי לאתר קטן) זה יכול לגרום ל-overFlow
עומס יתר על המשתנה במס' הזה יש 14 ספרות שנעות בין 0 ל-9 אבל המס' עצמו יגרום לקריסת המשתנה
ואני לא זורק סתם מילים!!!
טוב כמה דברים
דבר ראשון לא רציתי לעצבן אותך וסתם דיברתי ככה בגלל העצבים שלי שלא הולך לי אז הוצאתי את זה עליך…מצטער.
דבר שני לא הבנתי עדיין את הקטע של ה-overflow מה מחרוזת לא יכולה להכיל יותר מ-14 תווים? או שאם זה מספר אז אני מגדיר אותו כ long integer
ודווקא כן אפשר להגדיר משתנה מטיפוס מסוים אני זוכר שקראתי על זה פעם ב-msdn אבל לא זוכר בדיוק איך זה הולך נדמה לי ככה- dim i as integer
אממ אתה יכול להסביר לי מה אומר הקוד
אממ אתה יכול להסביר לי מה אומר הקוד שכתבת פה?
הבנתי שהלולאה רצה מ-0 ועד אורכו של הקאונטר…מה הלאה?
זה בכלל עובד?
לא, אני מקבל שגיאה
מה שכתבת פה זה בעצם פונקציה שכשאתה מזמן אותה אתה שולח כפרמטר פרוצדורה וזה אומר שזה לא חוקי…
אין פה שום פונקציה ופרוצדורה
א. מה השגיאה שלך?
ב. תראה את הקוד המלא
לפני כן –
נסה כך
dim x
for i=1 to len(counter)
x=x & "<img src = pics/"&FolderNum&"/" &cint(mid(counter,i,1)) &".jpg><br>"
next
response.write x
מה אין פה שום פרצדורה או פונקציה
cint זה פונקציה ו-mid זה פרוצדורה/פונקציה לא יודע מה זה בכלל אמור לעשות…
וזה כותב שלא קראת לפונקציה בצורה חוקית
טוב אין לי מושג איך
אבל הקוד שכתבת כאן עובד מצוין! סוף סוף אין שגיאות
אתה יכול להסביר לי בדיוק מה כל דבר כאן עושה כי אני לא אוהב לכתוב משהו בלי להבין מה עשיתי…
תראה
קוד כזה עובד מצויין אצלי.
<%
dim x
counter="12"
for i=1 to len(counter)
x=x & "<img src = "&mid(counter,i,1) &".gif><br>"
next
response.write x
%>
א. תדפיס את המשתנים Counter ו FolderNum וכתוב מה הם מכילים
ב. העתק את השגיאה המדוייקת שאתה מקבל.
תתעלם מזה
אני שמח שהוא עובד מצויין.
אבל במהלך השרשור הזה שיחקנו משחק ניחושים מיותר במקום שתציג שגיאות ותעזור לי לעזור לך – סה"כ זו אחת הלולאות הכי פשוטות שכתבתי, יכלנו לחסוך את כל השרשור הזה.
כשאני מבקש שגיאה אני יודע למה, הדיבגר הטוב ביותר הוא הדפדפן.
דבר שני – אתה יכול להוריד את ה Cint(), אם אני לא טועה זה יעבוד לך גם בלי.
ומה עשינו פה?
על Mid קרא במדריך Vbs, אבל מה שבעקרון עשינו זו לולאה שתעבור "אחד אחד" על כל תו בודד בסטרינג, עבור כל מספר בטרינג היא קוראת לתמונה המתאימה.
ולתשומת לבך: השמת Counter ב String זה פתרון קווקזי ולא מומלץ, ניתן בקלות לפרק מספר בעזרת האופרטורים ו Mod.
שני דברים
בקשר להגדרת משתנים לא שמעתי על דבר כזה ולכן אני יותר לא אדבר על זה
(אלא עם כן תביא לי קישור)
דבר שני… בקשר ל-oveFlow פעם אחת מישהו שהיכרתי בפורום של איציק (itzik1.co.il) אז הצליח לפרוץ לתוך כל מיני חשבונות בברינקסטר (דרך החשבון שלו) ופרץ לשלי ולמסד שהכיל את ה-counter והכניס לתוכו יות מידי נתונים
ואני ברוב תמימותי שמתי את ה-counter בתוך משתנה ופתאום בא עליו ה-overFlow הזה
הכוונה לשגרות
בקוד הקודם פשוט התחלתי מ0 במקום מ-1
טוב תודה על העזרה
אבל אם שמת לב דווקא כתבתי כאן את הקוד במלואו כולל השגיאות שהדפדפן נתן לי וכולל התוכן של קאונטר שזה בעצם כמה תגיות <img>
תראה,
זה לא לוטו. חצי שרשור בזבזנו על זה ש Counter זה בכלל סטרינג. בנוסף בקשתי ממך לא פעם שגיאה וכתבת לי את זה מילולית.
אבל לא משנה, פעם הבאה
M_K
מצטער שהטעתי אותך זה אפשרי פשוט אני אף לא ידעתי על זה ובשום מדריך (חוץ מה-MSDN) … אז שוב מצטער
זה אפשרי להגדיר את סוג המשתנה ב-VBS
בדיוק כמו שהגדרת
יש לך איזה רעיון אז איך אני יכול
לפתור את בעיית ה-overflow הזה? כי במקרה שלי מעל 6 ספרות יש את הבעיה הזאת-ואם אפשר אז ב-vbs כי אין לי מושג ב-js
הבעייה שלך היא מבחינת המסד?
כי זה סטרינג, לא צריכה להיות בעייה.
לא הסתדרתי בסוף
פשוט בקוד היה איפשהו cint אז הפכתי את זה ל-clng