עבור לתוכן

הפיכת שמות קבצי MP3

Featured Replies

פורסם

שלום לכולם !

אני מנסה לכתוב תוכנה שהופכת את שמות הקבצים והתאגים של קבצי MP3 על מנת שיראו היטב בנגני IRIVER כשתצא התמיכה בעברית (הפוכה) בקרוב.

כרגע התוכנה עובדת, אבל רק לקבצים בודדים... אני רוצה להרחיב אותה עבור WILDCARDS כלומר *,? וכן תמיכה רקורסיבית בספריות.

למישהו יש רעיון/פונקציה מוכנה שיכולה לעזור לי ?

בתודה מראש.

#include <iostream.h>

#include <string.h>

#include <stdio.h>

#define MAX 1024

bool is_shemi (char ch)

{

   return ((ch>='א') && (ch<='ת'));

}

void hebrev(const char* st, char* st2)

{

   int i,j,l,len;

   

   len=strlen(st)-1;

   st2[len+1]=0;

   if ((st[len-3]=='.')&&((st[len-2]=='m')||(st[len-2]=='M'))&&((st[len-1]=='p')||(st[len-1]=='P'))&&(st[len]=='3'))

   {

      st2[len-3]='.';

      st2[len-2]='m';

      st2[len-1]='p';

      st2[len]='3';

      len=len-4;

   }

   i=len;

   while (i>=0)

   {

      if (is_shemi(st))

         st2[len-i]=st;

      else

      {

         l=0;

         while (((i-l)>=0) && (!is_shemi(st[i-l])))

            l++;

         l--;

         for (j=0;j<=l;j++)

            st2[len-i+j]=st[i-l+j];

         i=i-l;

      }

      i--;

   }

}

void ren (const char* source, char* dest)

{

   hebrev(source,dest);

   if (!strcmp(source,dest))

      cout<<source<<" --> no change!"<<endl;

   else

      cout<<source<<" --> "<<dest<<endl;

   rename(source, dest);

   gets(dest); // just pause

}

int main (int argc, char *argv[])

{

   char new_filename[MAX];

   int argn;

   if (argc<2)

      cout<<"syntax: hebrev [heb_mp3_filenames]"<<endl;

   else

   {

      for (argn=1;argn<argc;argn++)

      {

         ren(argv[argn],new_filename);

      }

   }

   return 0;

}

פורסם

תשים

div 3

איפה שה X

אל תשכח שזה לולאה מקוננת אז אתה צריך לסגור הכל עם הסוף

פורסם

דבר ראשון, אני קניתי את ה iFP שלי בארה"ב דרך האינטרנט כשאמא שלי היתה שם... זה הדרך הכי זולה לדעתי להשיג את זה...

ולגבי התכנות:

אנשים! למה אתם מסבכים הכל! נכון ש C++ הי שפה עילית יותר מבייסיק אבל ב visual basic אפשר להכין תוכנה להפיכת התאגים בפחות מ10 דקות... חוץ מזה שם זכור לי היטב יש פונקציה בstring.h בשם srtrev? שהיא הופכת סטרינגים לא?

פורסם

שאלה...

בשביל שתהיה עברית נכונה צריכים להפוך את כל המשפט אות אחרי אות ככה:

יונתן הקטן רץ בבוקר אל הגן

||

/\

ןגה לא רקובב ץר ןטקה ןתנוי

?

פורסם
  • מחבר

Animatrix, אני לא יודע VB, אבל אם אתה יודע לעשות תוכנית כזאת, אתה מוזמן להראות לי איך..

וזה לא היפוך רגיל, כלומר לא הופכים את כל המילים- לדוגמה:

mp3.ראשון 123 FIRST שני 456 SECOND שלישי ->

mp3.ישילש SECOND 456 ינש FIRST 123 ןושאר

(נראה לי שככה זה יהיה תקין.. אולי אבדוק ואתקן אם צריך את הפונקציה כשתצא התמיכה..)

drevil , לא הבנתי על מה אתה מדבר (התוכנית עובדת כרגע)

כרגע אני רוצה להרחיב את התוכנית לWILDCARDS ותתי ספריות.

עריכה: אני מצרף את הקובץ ריצה של התוכנית שלמעלה שתבינו מה ניינים איתה

פורסם

בניתי פונקציה רקורסיבית שמעתיקה ספרייה כולל תתי ספריות.

אתה כמובן יכול לסנן מה שאתה לא צריך.

private void dir_Copy(string from,string to)

{

if(p.active)

{

string to_name = to + "\\" + Path.GetFileName(from);

if (!Directory.Exists(to_name))

{

// Create destination dir

Directory.CreateDirectory(to_name);

//this.run_Process();

p.richTextBox1.AppendText("Created Directory:"+to_name+"\n");

}

string[] from_dir = Directory.GetDirectories(from);

string[] from_files = Directory.GetFiles(from);

dir_copy_helper(from_dir,from_files,to_name);

p.richTextBox1.AppendText("Copy finished.");

this.file_Copy(from,to_name);

p.button1.Text="Finished";

}

else TaskDocument.myThread.Abort();

}

private void dir_copy_helper(string[] dirs, string[] files,

string to)//Copy Directroy using recoursion.

{

if (dirs.Length == 0)

{

copy_files_helper(files,to);

return;

}

// create dirs tree

for (int i=0; i<dirs.Length; i++)

{

string to_path = to+"\\"+Path.GetFileName(dirs);

Directory.CreateDirectory(to_path);

this.file_Copy(dirs,to_path);

string[] new_dirs = Directory.GetDirectories(dirs);

string[] new_files = Directory.GetFiles(dirs);

dir_copy_helper(new_dirs,new_files,to_path);

}

}

private void copy_files_helper(string[] files, string to)

{

//p.progressBar1.Minimum=0;

p.progressBar1.Value=0;

p.progressBar1.Maximum=files.Length;

p.progressBar1.Step=1;

for (int i=0; i<files.Length; i++)

{

string new_dest = to + "\\" + Path.GetFileName(files);

p.progressBar1.PerformStep();

p.richTextBox1.AppendText("Copying:"+files+" to:"+new_dest+"\n");

try

{

File.Copy(files,new_dest,true);

}

catch (System.UnauthorizedAccessException EX)

{

p.richTextBox1.AppendText("Can't access file: "+EX.Source+"\n");

}

catch (System.IO.IOException EX)

{

p.richTextBox1.AppendText("Error while copying:"+EX.Source+"\n");

}

}

}

פורסם

אני יודע VB ויש לי גם קוד !שלם! לגמרי של תוכנית שמשנה את הID3 של קבצי MP3 בVB וזה שטויות לעשות שהיא תעבור על כל קובץ בתיקיה... אני גם יודע C++ אז כל מה שאני צריך זה את הקוד שהופך את התוים בצורה הנכונה(שדרך אגב עוד לא הנתי איך אמור להיות נכון), ואני כבר יתרגם לVB ויוסיף ממשק יפה ואופציות חיוניות...

אני בטוח שאתם לא רוצים אתת התוכנה בדוס... אלה אם יש פה מישהו שיודע VC++...

קיצר תעבירו אלי את הקוד הסופי שהופך סטרינג בדרך נכונה ואני ימשיך משם ובסוף גם ישחרר באתר...

פורסם

קראתי פה : http://216.239.57.104/search?q=cache:gH-9grxknvoJ:www.nirdagan.com/hebrew/compare+Hebrew+visual&hl=iw&ie=UTF-8

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

והינה מצאתי גם קוד בC++ או C לא יודע.. שממיר בין השיטות...

הינה: www.evrit.co.il/code.htm

פורסם

אני לומד בקצב מטורף!

יש לי תוכנית מוכנה שהמירה את השם של הקובץ MP3 שנתתם כ4 הודעות למעלה !נכון! יש לי גם קוד של שינוי ID3...

אז זהו? אני מסודר נכון?

ההמרה נכונה? לחבר את התוכנית? איך אתם רוצים את הממשק? נותנים תיקיה וזה עובר על הקבצים? או לכל קובץ בנפרד?

יש לציין שתוכנית ההמרה יודעת גם להמיר בחזרה למקור...

פורסם
  • מחבר

Animatrix(צור איתי קשר באייסיקיו ;0) , עוד לא יצא לי להסתכל בלינקים שצירפת, אבל התוכנית שכתבתי כרגע יכולה לשנות שמות קבצים כולל WILDCARDS ותתי ספריות. רק אני צריך לשנות משהו כך שגם תהפוך את שמות הספריות וזהו... השתמשתי בקוד של תוכנית שנקרת JHEAD שמתעסקת עם קבצי JPG... אני אישית מעדיף COMMAND LINE APP אבל.. ממשק בנוסף כנראה שלא יזיק...

איך אתה משנה את התאגים ? האם אתה יכול לשנות גם את IDV1 וגם את IDV2 ?

מצורפים מזופזפים:

hebrev.exe

myglob.c

hebrev.c

/******************************************************************************************

* *

* Hebrev version 0.2 by idan miara email: miara(at)bonbon.net *

* special thanks to Matthias Wandel email: mwandel(at)sentex.net for myglob.c *

* *

******************************************************************************************/

#include <iostream.h>

#include <string.h>

#include <stdio.h>

#include "myglob.c"

//#define LCD_LEN 14

int is_shemi (char ch)

{

   return ((ch>='א') && (ch<='ת'));

}

void hebrev(const char* source_fullname, char* dest_fullname)

{

   int i,j,l,len;

   char *source_filename,*dest_filename;

   source_filename = strrchr(source_fullname,'\\');

   if (source_filename)

      source_filename++; // slash found

   else

      source_filename=source_fullname; // slash not found, then source_filename is the hole string

   

   strncpy(dest_fullname,source_fullname,source_filename-source_fullname);

   dest_filename=dest_fullname+(source_filename-source_fullname);

   len=strlen(source_filename)-1;

   dest_filename[len+1]=0;

   if ((source_filename[len-3]=='.')&&((source_filename[len-2]=='m')||(source_filename[len-2]=='M'))&&((source_filename[len-1]=='p')||(source_filename[len-1]=='P'))&&(source_filename[len]=='3'))

   {

      dest_filename[len-3]='.';

      dest_filename[len-2]='m';

      dest_filename[len-1]='p';

      dest_filename[len]='3';

      len=len-4;

   }

   i=len;

   while (i>=0)

   {

      if (is_shemi(source_filename))

         dest_filename[len-i]=source_filename;

      else

      {

         l=0;

         while (((i-l)>=0) && (!is_shemi(source_filename[i-l])))

            l++;

         l--;

         for (j=0;j<=l;j++)

            dest_filename[len-i+j]=source_filename[i-l+j];

         i=i-l;

      }

      i--;

   }

}

void ren (const char * source)

{

   char* dest;

   dest=malloc((strlen(source)+1)*sizeof(char));

   hebrev(source,dest);

   if (!strcmp(source,dest))

      printf("%s --> no change!\n",source);

   else

      printf("%s --> %s\n",source,dest);

   rename(source, dest);

   free(dest);

}

int main (int argc, char *argv[])

{

   int argn;

   if (argc<2)

   {

      printf("syntax: %s [heb_mp3_filenames]\n",argv[0]);

      printf("available wildcards: *, ? **(recursive)\n");

      printf("example: hebrev **\שלומ*.mp3 \n");

      printf("will process all strings which starts with שלומ within all subdirs\n");

   }

   else

      for (argn=1;argn<argc;argn++)

    MyGlob(argv[argn],ren);

   gets(argv[0]); // just pause

   return 0;

}

פורסם

אני יודע שזה לא קשור וזה אסור ואני אף פעם לא עושה את זה אבל אני חייב עכשיו!

בעעעעעעעעעעעעעעע פרופסורים איזה דברים מסובכים יש פה הייתי חושב שאתם משגרים פה מסרים לפיגועים עם לא היה לי קצת רקע, אבל וגם אני הייתי יודע :-[

פורסם
  • מחבר

עדכון: גרסה 0.3 !

סיימתי לעשות את כל הטיפולים בכל המקרים כולל ריקורסיות WILDCARDS ושינוי שמות ספריות. עובד מצויין.. עכשיו רק נותר להכניס פונ' שינוי תאגים. אם משהו מכיר פונקציות C כאלה פשוטות לשינוי ID3V2 (צרפתי קובץ עם פונ' C שינוי לID3V1 שעדיין לא בדקתי, אבל נראה מבטיח... מי שמיכר דומה ל-ID3V2 שיגיד בבקשה)

לעזרה: hebrev -h

אהה כן: ומי שיודע איך אפשר להראות עברית בCOMMAND PROMPT של WINXP שיגיד לי- זה מעצבן לראות ג'יבריש שם !!!

e-d-a , אני שמח שאנחנו מלהיבים אותך !

אני עושה את התוכנה הזאת בעיקר בשביל הכיף... אבל גם בגלל שאני אצתרך אותה כנראה.. סתם כי בא לי לתכנת !

פורסם

היי....

אם תענו לי אז יהיה לי רליס עד מחר של ממשק בוינדווס!

איזה שדות אתם רוצים שהתוכנה תהפוך? כותרת, אלבום, אמן, זהו?

ועוד משהו...

אתם רוצים שהתוכנה תיצור העתק של הקובץ המקורי ואז תשנה אותו או שתשנה את המקורי?

פורסם

מי שרוצה להשקיע היה עושה שינוי של הקובץ המקורי, אם אפשרות בחירה של יצירת\אי-יצירת backup...

פורסם

התוכנה מוכנה ועובדת פיקס ( לפי מה שאני ראיתי... ) רק מסדר קצת את הממשק ומפרסם...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים