2 bugs in amc2csv.exe
Posted: 2022-04-15 18:49:39
There is a bug in amc2csv.exe. It will not set " correctly when a field start with ".
In this example the problem is with the comments field:
the field starts with " but does not end with " and this is invalid csv syntax. With fgetcsv I get false and opening the csv in Excel, Excel fails to evaluate the other columns.
The other bug is with new line. I don't know if often or sometimes, but a new line in comment or description can generate a new line in the csv. The character generating a new line is not visibile in Ant Movie Catalog, that is if I can't see a new line but this is the CSV generated:
You can see a new line after "Papa Xiangruo", this breaks the csv.
In PHP, I used 2 fixes for these 2 bugs:
- I use a fake enclosure (chr(00)) when I use fgetcsv, that is: fgetcsv($handle, 409600, ';', chr(00));
- If I get a shorter row (bug n.2) I merge with the following line:
Code: Select all
183597;False;;;DVD;31/01/2021;;6,4;The Song of Names;The Song of Names || O cântico dos nomes || Le chant des noms || A nevek dala || Shir Ha'Shemot || Piesn imion || La canción de los nombres olvidados;;François Girard;Christian Angermayer, Marta Habior, Klemens Hallmann, Nick Hirschkorn, Alan Howard, Joe Iacono, Tibor Krsko, Lyse Lafontaine, Robert Lantos, Randy Lennox, Nadine Luque, Jens Meurer, Mark Musselman, Viktória Petrányi, Anant Singh, Stephen Spence, Peter Touche, Peter Watson;Canada, Hungary, United Kingdom, Germany;Drama, Music, Mystery, War;2019;108;Eddie Izzard (as BBC Radio Announcer (voice)), Gerran Howell (as Martin (17-23)), Stanley Townsend (as Gilbert Simmonds), Amy Sloan (as Enid Simmonds), Marina Hambro (as Young Helen), István Fazekas (as 1951 Conductor), Tim Roth (as Martin Simmonds), Catherine McCormack (as Helen Simmonds), Steven Hillman (as Mayor Froggatt), Sharon Percy (as Jenny Burrows), Eszter Lugosi (as Clarinet Girl), Áron Rátkay (as Cello Boy (as Rátkay Áron)), Eszter Túrós (as Piano Accompanist), Annamária Makai (as Piano Girl (as Makai Annamária)), Viktoria Kay (as Ellen Stemp), Max Macmillan (as Peter Stemp), Misha Handley (as Martin (9-13)), Luke Doyle (as Dovidl (9-13)), Tamás Puskás (as Professor Carl Flesch), Jakub Kotynski (as Zygmunt Rapoport), Richard Bremmer (as Billy the Busker), Matt Devere (as Milkman), Julian Wadham (as Mr. Bailey), István Darvas (as Bar Mitzvah Rabbi), Alex Bisping (as Warsaw Taxi Driver), Jonah Hauer-King (as Dovidl (17-23)), Lidia Bogacz (as Asylum Nurse (as Lidia Bogaczowna)), Magdalena Cielecka (as Anna Wozniak), Zsófi Tóth (as Young Anna Wozniak), Saul Rubinek (as Mr. Feinman), Joanna Caplan (as Broche Rapoport), Jesse Noah Gruman (as Zygmunt Rapoport (7)), Clive Owen (as Dovidl Rapoport), Howard Jerome (as Katzenberg), Chaim Paskesz (as Frumkin), Pinchasz Weisberger (as Chaim Frumkin), Daniel Mutlu (as Young Rebbe), Declan Hannigan (as Desk Clerk), Wayne Brett (as Security Man), Jack Martin Haendler (as 1986 Conductor), Ralph Berkin (as Orchestra Manager Sanderson), Jeffrey Caine (as Tom Noble), Tamás Masa (as Sabbathsong Klezmer Band), Bálint Szabó (as Sabbathsong Klezmer Band), Izsák Farkas (as Sabbathsong Klezmer Band), Sándor Csányi (as Sabbathsong Klezmer Band), Endre Kertész (as Sabbathsong Klezmer Band), György Szentkirályi (as Sabbathsong Klezmer Band), Zoltán Langer (as Sabbathsong Klezmer Band), Szabolcs Andrasics (as Sabbathsong Klezmer Band), Budapest Simfonietta (as Symphony Orchestra), Kamil Lemieszewski (as Hebrew Rabi / Polish Doctor (uncredited) (voice)), Balázs Veres (as Railway Station Guard (uncredited));https://www.imdb.com/title/tt1657517;Martin Simmonds, 35 anni dopo la sparizione improvvisa dell'amico David Rapoport, violinista geniale sin dall'infanzia, lo cerca ovunque per fargli pagare le conseguenze di quella scomparsa che aveva portato alla morte del padre di Martin ma anche per scoprire il mistero di quanto accaduto alla famiglia di David deportata a Treblinka.;"Il Signore formò dal suolo ogni genere di animale selvatico e ogni uccello dei cieli, che condusse quindi all’uomo per vedere che nome gli avrebbe assegnato… L’uomo diede dei nomi a tutto il bestiame, agli uccelli del cieli e a tutte le bestie del campo”. (Bereshit 2, 19-20). Nella tradizione ebraica l'assegnare il nome ha una fondamentale importanza. Nel Midràsh leggiamo che, dopo che l'uomo ha dato un nome a tutti gli esseri viventi Dio gli chiede di dare un nome a se stesso. Il senso del titolo di questo film, tratto da un romanzo di Norman Lebrecht, nasce proprio dal bisogno (lo spettatore scoprirà in quale contesto) di fare memoria dei nomi di chi non c'è più con una variante altrettanto fondamentale nella cultura ebraica: la musica. La musica nel film è suonata su uno strumento che ha segnato in maniera indelebile il tragico percorso del popolo ebraico, in particolare nel '900: il violino. Perché David è stato fin da piccolo un raffinato esecutore anche troppo consapevole della propria abilità ma proprio una sua mancata presenza, un'assenza di suono, ha segnato la fine di un rapporto, inizialmente contrastato ma poi divenuto solidale, con il quasi coetaneo Martin la cui famiglia aveva accolto e assistito il piccolo ebreo polacco. Tim Roth è come sempre abile nel tratteggiare una pervicace detection che ha come obiettivo il ritrovare l'amico e Clive Owen potrà sorprendere più di uno spettatore nei panni (letteralmente) insoliti di un David adulto. La musica è il fil rouge di due esistenze che passano dal'usare la musica come indizio di superiorità a scoprirne l'enorme potenzialità evocativa. Sono due vite tese. L'amicizia/rivalità è la pece secca che bisogna passare sull'archetto dell'esistenza perché quest'ultima possa risuonare per tutti. Magari anche per una volta sola.;AVC;399;AC3, AAC LC;345;720x302;25,000;Italian, English;Italian, Italian;851;1;0
Code: Select all
"Il Signore formò dal suolo ogni genere di animale selvatico e ogni uccello dei cieli, che condusse quindi all’uomo per vedere che nome gli avrebbe assegnato… L’uomo diede dei nomi a tutto il bestiame, agli uccelli del cieli e a tutte le bestie del campo”. (Bereshit 2, 19-20). Nella tradizione ebraica l'assegnare il nome ha una fondamentale importanza. Nel Midràsh leggiamo che, dopo che l'uomo ha dato un nome a tutti gli esseri viventi Dio gli chiede di dare un nome a se stesso. Il senso del titolo di questo film, tratto da un romanzo di Norman Lebrecht, nasce proprio dal bisogno (lo spettatore scoprirà in quale contesto) di fare memoria dei nomi di chi non c'è più con una variante altrettanto fondamentale nella cultura ebraica: la musica. La musica nel film è suonata su uno strumento che ha segnato in maniera indelebile il tragico percorso del popolo ebraico, in particolare nel '900: il violino. Perché David è stato fin da piccolo un raffinato esecutore anche troppo consapevole della propria abilità ma proprio una sua mancata presenza, un'assenza di suono, ha segnato la fine di un rapporto, inizialmente contrastato ma poi divenuto solidale, con il quasi coetaneo Martin la cui famiglia aveva accolto e assistito il piccolo ebreo polacco. Tim Roth è come sempre abile nel tratteggiare una pervicace detection che ha come obiettivo il ritrovare l'amico e Clive Owen potrà sorprendere più di uno spettatore nei panni (letteralmente) insoliti di un David adulto. La musica è il fil rouge di due esistenze che passano dal'usare la musica come indizio di superiorità a scoprirne l'enorme potenzialità evocativa. Sono due vite tese. L'amicizia/rivalità è la pece secca che bisogna passare sull'archetto dell'esistenza perché quest'ultima possa risuonare per tutti. Magari anche per una volta sola.
The other bug is with new line. I don't know if often or sometimes, but a new line in comment or description can generate a new line in the csv. The character generating a new line is not visibile in Ant Movie Catalog, that is if I can't see a new line but this is the CSV generated:
Code: Select all
161272;False;;;DVD;26/12/2021;.;0,0;The Ghost Story - Lotus the Beauty;The Ghost Story - Lotus the Beauty;;Zhou Shengwei, Xu Juntai;;Hong Kong;Erotico, Drammatico, Fantasy;1992;83;Yan Qianwen, Zhong Shuhui, Zhan Bingxi, Xia Junhao;https://www.themoviedb.org/movie/404149?language=zh-CN;Lo studioso Zong Xiangruo ha riportato una donna misteriosa nella famiglia del clan. Un monaco vide che Zong Xiangruo era affascinato dalla banshee, e la famiglia di Papa Xiangruo
Le persone usano un talismano magico per affrontare la banshee. La banshee sembra immediatamente sottomessa dal talismano magico, ma se Zong Xiang non può sopportarlo, la rilascia. Più tardi, Zong Xiangruo è gravemente malato e sta morendo. Salva e istruisci trova un aiutante. Hou Zong Xiangruo fece pace e diede alla luce un figlio. Ma questa era originariamente una ricompensa per gratitudine, e da allora è scomparsa, lasciando Zong Xiangruo con filo bianco, lasciandogli solo un ricordo romantico...;;AVC;1009;AC3, AC3;80;704x352;29,970;Chinese, Chinese;;697;1;0
In PHP, I used 2 fixes for these 2 bugs:
- I use a fake enclosure (chr(00)) when I use fgetcsv, that is: fgetcsv($handle, 409600, ';', chr(00));
- If I get a shorter row (bug n.2) I merge with the following line:
Code: Select all
while (!feof($handle)) {
$parts = fgetcsv($handle, 409600, ';', chr(00));
if (count($parts) < count($headers)) {
// bug! Merge with next line
$parts2 = fgetcsv($handle, 409600, ';', chr(00));
$parts[array_key_last($parts)] .= array_shift($parts2);
$parts = array_merge($parts, $parts2);
if (count($parts) !== count($headers))
die("Merging lines failed.\r\n");
}
...
}