הפיכת שמות קבצי MP3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


idanm19

Recommended Posts

שלום לכולם !

אני מנסה לכתוב תוכנה שהופכת את שמות הקבצים והתאגים של קבצי על מנת שיראו היטב בנגני 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;

}

קישור לתוכן
שתף באתרים אחרים

דבר ראשון, אני קניתי את ה 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 של קבצי ב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

קישור לתוכן
שתף באתרים אחרים

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

יש לי תוכנית מוכנה שהמירה את השם של הקובץ שנתתם כ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 , אני שמח שאנחנו מלהיבים אותך !

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

קישור לתוכן
שתף באתרים אחרים

היי....

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

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

ועוד משהו...

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...