הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה|בעיה מוזרה בעיבוד טקסט שמיובא מקובץ (https://hosts.co.il/forums/showthread.php?t=74678)

Erez | TrustMedia.co.il 19-05-09 17:02

עזרה|בעיה מוזרה בעיבוד טקסט שמיובא מקובץ
 
אני רוצה לקחת קובץ טקסט מסויים ולשנות אותו עם regex בהתאם
אבל כאשר אני מייבא את התוכן של הקובץ עם file_get_contents או עם fopen משום מה זה לא עובד,אבל אם אני מעתיק את התוכן של הקובץ לתוך משתנה ידנית,אז זה עובד מצויין
למישהו יש מושג למה זה ככה?
אם אתם צריכים את הקוד של העמוד אני יביא

Erez | TrustMedia.co.il 25-05-09 18:26

הנה הקוד:

זה עובד:
PHP קוד:

<pre>
<?php
$srtInput 
'1
00:00:09,600 --> 00:00:10,644
<i>!חשוך כאן</i>

2
00:00:11,345 --> 00:00:13,045
<i>המנהל סקינר
אני צובע בתים</i>

3
00:00:15,046 --> 00:00:16,546
<i>אני לא אשפוך רוטב חריף
לתוך בובת ההחייאה</i>'
;
$regExp "#[0-9]{1,5}[\n]([0-9]{2}:[0-9]{2}:[0-9]{2}),([0-9]{3}) --> ([0-9]{2}:[0-9]{2}:[0-9]{2}),([0-9]{3})\n((.+\n)*)#";
$results preg_match_all($regExp,"\n".$srtInput."\n"$matches);
 
print_r($matches);
 
?>
 </pre>

אבל זה לא עובד:
PHP קוד:

<pre>
<?php
$srtInput 
file_get_contents("sd.srt");
$regExp "#[0-9]{1,5}[\n]([0-9]{2}:[0-9]{2}:[0-9]{2}),([0-9]{3}) --> ([0-9]{2}:[0-9]{2}:[0-9]{2}),([0-9]{3})\n((.+\n)*)#";
$results preg_match_all($regExp,"\n".$srtInput."\n"$matches);
 
print_r($matches);
 
?>
 </pre>

הקובץ sd.srt מכיל את התוכן הבא:
ציטוט:

1
00:00:09,600 --> 00:00:10,644
<i>!חשוך כאן</i>

2
00:00:11,345 --> 00:00:13,045
<i>המנהל סקינר
אני צובע בתים</i>

3
00:00:15,046 --> 00:00:16,546
<i>אני לא אשפוך רוטב חריף
לתוך בובת ההחייאה</i>
(בקיצור קובץ כתוביות רגיל שהורדתי מאינטרנט)

ההבדל היחיד ששמתי לב אליו זה שאם אני מציג את שניהם בטבלה(כל אחד בטור) אז התוכן של המשתנה שהעתקתי אליו את התוכן ידנית יורד שורה אחת למטה,לא הצלחתי לסדר את זה
ועוד דבר אחד שגיליתי מחיפוש קצר בפורומים באינטרנט זה שכתוביות מקודדות בUTF16,וPHP לא תומך בUFT16 בצורה מושלמת,ויכול להיות שזה הסיבה,אבל אני לא מצליח לשנות לקובץ את הקידוד

Daniel 26-05-09 18:46

לא הבנתי - אבל מהמעט שהבנתי תשתמש ב-\r\n במקום רק ב-\n

Erez | TrustMedia.co.il 26-05-09 20:46

ציטוט:

נכתב במקור על ידי MasterT (פרסם 717267)
לא הבנתי - אבל מהמעט שהבנתי תשתמש ב-\r\n במקום רק ב-\n

תודה!!!
אני לפחות שבוע מנסה לפתור את זה ולא הצלחתי,תודה!!!
רק אם אתה יכול להסביר מה ההבדל בין \n לבין \r\n?ומתי צריך להשתמש במה?

vadimg88 27-05-09 07:40

ההבדל בין \n ל \r\n הוא מערכת ההפעלה שבה אתה עובד.

בדוס ווינדוס שורה חדשה נוצרת על ידי \r\n במערכות הפעלה מסוג UNIX זה מתבצע בעזרת \n ב MAC זה \r

מביא אותי לחשוב למה זה פתר לך את הבעיה בכלל.

Erez | TrustMedia.co.il 27-05-09 17:18

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 717323)
ההבדל בין \n ל \r\n הוא מערכת ההפעלה שבה אתה עובד.

בדוס ווינדוס שורה חדשה נוצרת על ידי \r\n במערכות הפעלה מסוג UNIX זה מתבצע בעזרת \n ב MAC זה \r

מביא אותי לחשוב למה זה פתר לך את הבעיה בכלל.

אז אם אני יאחסן את זה על שרת לינוקס אני יצטרך לרשום /n?
וגם אני לא ממש מבין איך זה פתר את הבעיה,אבל זה פתר:-D

vadimg88 27-05-09 18:35

כן, אבל אז אם הסקריפט ישב על וינדוס תיהיה בעיה (לא כל כך בעיה רק שלא בטוח שזה יעשה שורה חדשה אלה אם הוגדר בוינדוס לתמוך בזה) לכן פשוט תשתמש ב EOL ב PHP.

Erez | TrustMedia.co.il 27-05-09 22:16

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 717430)
כן, אבל אז אם הסקריפט ישב על וינדוס תיהיה בעיה (לא כל כך בעיה רק שלא בטוח שזה יעשה שורה חדשה אלה אם הוגדר בוינדוס לתמוך בזה) לכן פשוט תשתמש ב EOL ב PHP.

כאילו לעשות ככה:
<<<EOL EOL;
?
או שלא הבנתי אותך נכון?
בכל מקרה הסקריפט יהיה מאוחסן על לינוקס,אז כשאני יעלה אני ישנה אותו|קורץ|

vadimg88 28-05-09 07:04

לא מה שאתה מתכוון ב <<<EOL זה HERDOC אני מתכוון ל EOL שזה CONSTANT ב PHP שמעיד על End Of Line שורה חדשה בעצם והיא תוצג לפי מערכת ההפעלה בה הסקריפט רץ.

Shillo 28-05-09 11:53

file_get_contents לא סידר לך אוטומטית את הקובץ?
כשאני משתמש בזה זה מסדר.


כל הזמנים הם GMT +2. הזמן כעת הוא 20:28.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ